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中都会出现这种情况.
结果我不知道该怎么告诉学生,除了我会回到他们身边.
任何帮助,将不胜感激.谢谢
如果要更改调用者的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)
| 归档时间: |
|
| 查看次数: |
1750 次 |
| 最近记录: |