当我使用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);
我无法弄清楚我的错误。有人帮我找错了吗? 的由于 * 抱歉,对于代码中的错误,现在没问题 *
答案 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,并确保不会溢出已分配缓冲区的末尾。