MST

星途 面试题库

面试题:C语言复杂指针结构与变量动态操作

假设有一个结构体,结构体中包含一个指向整数数组的指针和数组的大小。编写一个函数,接收这个结构体的指针,在函数内部动态分配内存创建一个新的整数数组,数组元素个数为结构体中指定大小的两倍。将原数组的元素复制到新数组的前半部分,后半部分元素设置为前半部分对应位置元素的相反数。最后,修改结构体中的指针指向新数组,并释放原数组的内存。请写出完整的C语言代码实现,并考虑内存泄漏等问题。
49.2万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>

// 定义结构体
typedef struct {
    int *array;
    int size;
} MyStruct;

// 定义函数
void modifyArray(MyStruct *s) {
    // 动态分配新数组内存
    int *newArray = (int *)malloc(2 * s->size * sizeof(int));
    if (newArray == NULL) {
        fprintf(stderr, "内存分配失败\n");
        return;
    }

    // 复制原数组元素到新数组前半部分
    for (int i = 0; i < s->size; i++) {
        newArray[i] = s->array[i];
    }

    // 设置新数组后半部分元素为前半部分对应位置元素的相反数
    for (int i = 0; i < s->size; i++) {
        newArray[i + s->size] = -s->array[i];
    }

    // 释放原数组内存
    free(s->array);

    // 修改结构体中的指针指向新数组
    s->array = newArray;
    s->size = 2 * s->size;
}

int main() {
    MyStruct s;
    s.size = 3;
    s.array = (int *)malloc(s.size * sizeof(int));
    if (s.array == NULL) {
        fprintf(stderr, "内存分配失败\n");
        return 1;
    }

    // 初始化原数组
    s.array[0] = 1;
    s.array[1] = 2;
    s.array[2] = 3;

    modifyArray(&s);

    // 打印新数组
    for (int i = 0; i < s.size; i++) {
        printf("%d ", s.array[i]);
    }
    printf("\n");

    // 释放新数组内存
    free(s.array);

    return 0;
}