gpt4 book ai didi

使用包装函数调用 Malloc

转载 作者:行者123 更新时间:2023-11-30 19:55:30 25 4
gpt4 key购买 nike

我在初学者类(class)中帮助教授 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;
}

据我所知,数组变量只会成为内存中为数组保留的第一个点的地址。我认为无论内存分配在哪里,即在 main 中还是在 mallocWrapper 中,情况都会如此。

因此,除了回复他们之外,我不知道该告诉学生什么。

如有任何帮助,我们将不胜感激。谢谢

最佳答案

如果你想改变调用者的数组成员,你需要传递一个指针给它。即,您需要将指向指针的指针传递给 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);

关于使用包装函数调用 Malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20282135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com