segfault on free()一个指向char *的指针

时间:2013-06-26 19:33:40

标签: c segmentation-fault malloc free

当我使用free()分配内存时,malloc()函数出现问题。

程序运行时会产生分段错误。我生成了一个程序的coredump。当我使用gdb时,它会在对free()的调用中显示段错误。

这是我的代码:

char * temp_filename;
temp_filename = (char *) malloc(50);
temp_filename = strrchr(package->_local_filename, '/');
strcat(package->_cache_filename, temp_filename);
free(temp_filename);

我无法弄清楚我的错误。有人帮我找错了吗? 的由于 * 抱歉,对于代码中的错误,现在没问题 *

3 个答案:

答案 0 :(得分:3)

使用指向您正在搜索的其他字符串的指针覆盖已分配的指针:

temp_filename = (char *) malloc(50);
temp_filename = strrchr(package->_local_filename, '/');

然后,你错误地释放了该指针,因为它不再是malloc()返回的指针:

free(temp_filename);

要修复,请删除分配和释放的代码。

char * temp_filename;
temp_filename = strrchr(package->_local_filename, '/');
strcat(package->_cache_filename, temp_filename);

答案 1 :(得分:2)

问题是temp_filename没有指向使用malloc()分配的内存。相反,它包含指向package->_local_filename

的指针
temp_filename = strrchr(package->_local_filename, '/');

您可以移除对malloc()free()的来电,因为它们是不必要的。

答案 2 :(得分:0)

尝试使用strncat而不是strcat,并确保不会溢出已分配缓冲区的末尾。