-1

对不起,我知道我不应该 free() 两次指针,但是我如何检查是否还没有空闲?检查是否为空?我不知道,因为有人告诉我 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但我不知道在他的启动时是否自动传递所有参数(在这种情况下这个称为“缓冲区”的指针)将是免费的()。因为在第二个时刻它出现了一个错误/异常在双 free() 调用上,所以可能在线程结束时自动调用了第一个 free,因为我使用“缓冲区”作为参数?

4

1 回答 1

0

正如托尼所说,您的逻辑可能存在漏洞。最好的答案是重新编写你的代码。

请注意,我不是 C 方面的专家,但如果您出于某种原因无法更改代码,那么也许您可以尝试以下操作:
- 添加变量“ hasBeenFree = FALSE ”(可能是全局变量或参数函数) - 并在调用free
之前对其进行测试:

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

不过希望有经验的大侠能解答一下。

为什么要标记“cunit”?

于 2014-02-14T02:05:58.700 回答