使用包装函数调用Malloc

 皆靖所能 发布于 2023-02-13 19:53

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

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

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

#include  

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中都会出现这种情况.

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

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

1 个回答
  • 如果要更改调用者的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);
    

    2023-02-13 19:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有