1

我有一个包含 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)

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

4

2 回答 2

0

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

于 2013-03-03T03:30:39.807 回答
0

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

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

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

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

于 2013-03-03T02:50:30.720 回答