2013-06-26 85 views
2

当我使用malloc()分配内存时,我遇到free()函数的问题。segfault on free()指向char的指针*

程序运行时,会产生分段错误。我产生了一个程序的核心转储。当我使用gdb时,它在调用free()时显示segfault。

这是我的代码:

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

我无法弄清楚我的错误。有人帮我找到我的错误吗? 感谢 * 对不起有关的代码错误回报,现在是OK *

+2

您不要在malloc和free之间的任何位置使用'temp_filename'。你确定这是你所有的相关代码吗? – Paulpro

+1

另外,你确定segfault没有发生在行吗?当'package-> cache_filename'没有为自己指定足够的分配内存以及'temp_filename_dest'的长度时,'strcat'可以发生段错误。 – Paulpro

+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); 
+0

我无法释放“temp_filename”使用的内存? –

+0

@VitorLuis:你在'strrchr()'调用之后已经覆盖了指针的值,因此你永远不会使用那个内存。所以,你可以不首先调用'malloc()'。 – jxh

+0

很酷,谢谢你的帮助! –

0

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

2

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

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

您可以删除通话malloc()free()因为它们是不必要的。

+0

+1,也是YOMAD。 – jxh

+0

很酷,谢谢你的帮助! –

相关问题