释放自定义Tuple数组时触发free函数参数类型不兼容错误求助
解决「Incompatible type for argument 1 of free」错误
嘿,我来帮你搞定这个free报错的问题!
首先得搞清楚错误的根源:你在循环里写的free(freq_words[i])完全是多此一举,而且是错的。咱们来捋清楚内存分配的逻辑:
你创建数组时用的是
Tuple *freq_words = (Tuple *) malloc(sizeof(Tuple) * num);,这行代码是一次性分配了一块连续的内存,这块内存能装下num个Tuple结构体。也就是说,freq_words[0]、freq_words[1]……freq_words[num-1]都是这块大内存里的一部分,它们不是单独通过malloc分配出来的独立指针,所以根本不能对它们调用free——free函数只能用来释放那些单独用malloc/calloc/realloc申请的内存地址。真正需要释放的是每个
Tuple结构体里的word指针,因为这个指针应该是你之前单独为每个单词动态分配的内存(比如用malloc给它分配了存字符串的空间)。
所以修正后的free_freq_words函数应该是这样的:
void free_freq_words(Tuple *freq_words, int num) { int i; for (i = 0; i < num; i++) { // 只释放每个结构体中动态分配的word指针 free(freq_words[i].word); } // 最后一次性释放整个结构体数组的内存 free(freq_words); }
额外提个小建议:释放完内存后,最好把对应的指针置为NULL,比如freq_words[i].word = NULL;和freq_words = NULL;,这样能避免后续不小心访问野指针的问题,算是个不错的编码习惯。
内容的提问来源于stack exchange,提问作者dumbitdownjr
相关产品推荐
相关产品推荐

