2

当我free()使用malloc().

当程序运行时,它会产生一个分段错误。我生成了程序的核心转储。当我使用 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);

我无法弄清楚我的错误。有没有人帮我找出我的错误? 谢谢 *抱歉代码错误,现在可以了*

4

3 回答 3

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);
于 2013-06-26T19:48:03.487 回答
2

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

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

您可以删除对 and 的调用malloc()free()因为它们是不必要的。

于 2013-06-26T19:48:01.017 回答
0

Try using strncat instead of strcat, and make sure you are not overflowing the end of your allocated buffer.

于 2013-06-26T19:36:13.517 回答