使用包装函数调用Malloc

And*_*y T -2 c memory arrays malloc

我在初学者班上帮助教C语言.我们讨论了使用malloc进行动态内存分配,并且学生想要在malloc周围放置一个包装器.我不确定这是否会有用,但玩弄东西是最好的学习方法.

然而,当学生试图通过他们的malloc包装函数为数组提供内存时,它不起作用 - 分段错误.

下面给出一个最小的例子.

#include <stdlib.h> 

void mallocWrapper(int *intArray, int length){

    intArray = malloc(length * sizeof(int));
}

int main() { 

    int *array;
    int arraySize = 10;

    mallocWrapper(array, arraySize);

    // this line causes the Segmentation fault  
    array[0] = 0;

    return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

据我所知,数组变量只会成为内存中为数组保留的第一个点的地址.我认为无论内存分配在哪里,即在main或mallocWrapper中都会出现这种情况.

结果我不知道该怎么告诉学生,除了我会回到他们身边.

任何帮助,将不胜感激.谢谢

sim*_*onc 5

如果要更改调用者的array成员,则需要传递指向它的指针.即你需要将指针传递给指针mallocWrapper.

void mallocWrapper(int **intArray, int length){
    *intArray = malloc(length * sizeof(int));
}

mallocWrapper(&array, arraySize);
Run Code Online (Sandbox Code Playgroud)

或者,更好的是,您可以更改mallocWrapper为返回新分配的内存.

void* mallocWrapper(int length){
    return malloc(length * sizeof(int));
}

array = mallocWrapper(arraySize);
Run Code Online (Sandbox Code Playgroud)

  • 第二种方法是要走的路.包装`malloc()`并改变调用"风格"似乎非常不友好. (2认同)