我在初学者班上帮助教C语言.我们讨论了使用malloc进行动态内存分配,并且学生想要在malloc周围放置一个包装器.我不确定这是否会有用,但玩弄东西是最好的学习方法.
然而,当学生试图通过他们的malloc包装函数为数组提供内存时,它不起作用 - 分段错误.
下面给出一个最小的例子.
#includevoid 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; }
据我所知,数组变量只会成为内存中为数组保留的第一个点的地址.我认为无论内存分配在哪里,即在main或mallocWrapper中都会出现这种情况.
结果我不知道该怎么告诉学生,除了我会回到他们身边.
任何帮助,将不胜感激.谢谢
如果要更改调用者的array
成员,则需要传递指向它的指针.即你需要将指针传递给指针mallocWrapper
.
void mallocWrapper(int **intArray, int length){ *intArray = malloc(length * sizeof(int)); } mallocWrapper(&array, arraySize);
或者,更好的是,您可以更改mallocWrapper
为返回新分配的内存.
void* mallocWrapper(int length){ return malloc(length * sizeof(int)); } array = mallocWrapper(arraySize);