释放指针指针

时间:2013-03-03 02:25:14

标签: c pointers dynamic memory-leaks free

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

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)

但第二次通话导致程序崩溃。有人可以解释我做错了什么吗?

2 个答案:

答案 0 :(得分:0)

这看起来很好,只要get_size()返回一个合理的值,循环上升到SIZE就会达到用户输入的大小(或更小)(并且两者都相同) !),parse_index[i]包含的malloc(3)内存不足free(3)

我们需要很多更多的程序来诊断问题。它甚至可能是完全无关的东西在你的数据结构上乱涂乱画...简化程序在这里显示它很好,只要简化版本以相同的方式崩溃

编译最大警告,追捕每个警告并修复它(了解编译器认为错误的内容,不要只是关闭它)或确保编译器混淆或处理不完整的数据。在调试器下运行程序,让它崩溃。找出在哪里/为什么/如何。在valgrind或类似项下运行程序以诊断可能的内存处理不一致性。

顺便说一下,施展malloc(3)是一个坏主意,不需要它,可能会掩盖错误。

答案 1 :(得分:0)

现在解决了这个问题。我正在调用一个错误的函数,它不会将sizeof乘以sizeof(char *)。