Cunit测试两次免费内存

时间:2013-12-01 17:36:55

标签: c free cunit

对不起,我知道我不应该释放两次指针,但我怎么能检查它是否已经免费?检查是否为空?我不知道有人告诉我free()命令不会在内存中写入null但只是释放空间! 救命 !!非常感谢!

void buffer_destroy(buffer_t* buffer){
        if(buffer==NULL){
            return ;
        }

        int i;
        if(buffer->size>0){


        for(i=0;i<buffer->size;i++){
            msg_destroy_string(buffer->array_msg[i]);

        }

        }
        free(buffer->array_msg);
        free(buffer);

实际上我有一个buffer.ca线程,它启动一个函数,并将一个名为“buffer”的指针作为参数。然后我在这个线程上调用一个pthread_join,但我不知道是否自动在启动时传递所有参数(在这种情况下,这个名为“buffer”的指针将是free()。 因为在第二个时刻它在double free()调用中出现了错误/异常,所以可能在线程结束时自动调用了第一个free,因为我使用“buffer”作为参数?

1 个答案:

答案 0 :(得分:0)

正如托尼所说,可能你的逻辑上有漏洞。最好的答案是重做代码。

请注意,我不是C专家,但如果您因任何原因无法更改代码,那么也许您可以尝试以下方法:
- 添加变量“ hasBeenFree = FALSE ”(可能是全局变量或函数的参数)
- 在致电免费之前测试它:

if (!hasBeenFree) {
   free(buffer);
   hasBeenFree = TRUE;
}

但我希望有经验的人能回答你。

为什么要标记“cunit”?

相关问题