c - 释放指向指针的指针

标签 c pointers dynamic memory-leaks free

我有一个包含 char* 的数组 user_input。现在,该数组的大小将在运行时由以下代码确定。

char** user_input;
user_input = (char**)malloc(get_size());

现在,user_input 中的每个索引都将包含一个指向从函数 parse_index(int) 接收的动态分配的字符数组的指针。

for(int i=0;i<SIZE;i++){
   user_input[i]=parse_index[i];       //parse_index makes a call to malloc
}

现在,当我完成后,我通过以下代码释放堆上的所有内存。

//to deallocate the character arrays
for(int i=0;i<SIZE;i++){
   free(user_input[i])      
}
//to deallocate the char*
free(user_input)

但是第二次调用导致程序崩溃..有人可以解释我做错了什么吗?

最佳答案

这看起来不错,只要 get_size() 返回一个合理的值,循环上升到 SIZE 上升到用户的大小(或更小)输入(并且两者去相同!),并且 parse_index[i] 包含足够的 malloc(3)ed 内存,不是 free(3) 在别处编辑。

我们需要很多程序来诊断问题。它甚至可能是一些完全不相关的涂鸦你的数据结构...简化程序以在此处显示它很好,只要简化版本以相同的方式崩溃

使用最多的警告进行编译,找出每一个并修复它(了解编译器认为错误的地方,不要只是关闭它)或确保编译器混淆或处理不完整的数据。在调试器下运行你的程序,让它崩溃。找出地点/原因/方式。在 valgrind 下运行程序或类似的诊断可能的内存处理不一致。

顺便说一句,强制转换 malloc(3) 是个坏主意,它不是必需的,并且可能会掩盖错误。

关于c - 释放指向指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15181793/

相关文章:

c - 如何在 PC 上启动小型嵌入式编程/项目?

c - 交换 2 个空指针地址

c++ - 理解 C++ 中双指针和单指针内存分配之间差异的问题

javascript - 使用 Google 网站优化工具测试动态页面

java - 如何启用从浏览器下载动态生成的文件?

c++ - 推荐哪个C/C++的跨平台UI框架...

在 PostgreSQL C 函数中创建 int8[] 数组

c++ - 指向 C++ 中的结构的指针 - 从控制台读取?

c++ - 创建指针的c++ vector

c# - 使用 System.Linq.Dynamic.Core 查询具有成员字典的对象列表时无法获得多个结果