我有一个数组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)
但第二次通话导致程序崩溃。有人可以解释我做错了什么吗?
答案 0 :(得分:0)
这看起来很好,只要get_size()
返回一个合理的值,循环上升到SIZE
就会达到用户输入的大小(或更小)(并且两者都相同) !),parse_index[i]
包含的malloc(3)
内存不足free(3)
。
我们需要很多更多的程序来诊断问题。它甚至可能是完全无关的东西在你的数据结构上乱涂乱画...简化程序在这里显示它很好,只要简化版本以相同的方式崩溃。
编译最大警告,追捕每个警告并修复它(了解编译器认为错误的内容,不要只是关闭它)或确保编译器混淆或处理不完整的数据。在调试器下运行程序,让它崩溃。找出在哪里/为什么/如何。在valgrind或类似项下运行程序以诊断可能的内存处理不一致性。
顺便说一下,施展malloc(3)
是一个坏主意,不需要它,可能会掩盖错误。
答案 1 :(得分:0)
现在解决了这个问题。我正在调用一个错误的函数,它不会将sizeof乘以sizeof(char *)。