C语言 free()有关问题
C语言 free()问题
这段代码运行的时候,会出现堆损坏的错误,free(handle_string,没有办法释放内存。为什么???
------解决方案--------------------
handle_string = "d:/test.txt"; 这个字符串是常量 不能free对应的地址
printf("%s , %d\n",handle_string,strlen(handle_string));
free(handle_string);
------解决方案--------------------
handle_string = (char *)calloc(12,sizeof(char));
handle_string = "d:/test.txt";
你改变handle_string的指向了。
肯定能够没发 free啊。
------解决方案--------------------
你是想赋值吧?字符串赋值是
strcpy。
这样:
strcpy(handle_string , "d:/test.txt");
------解决方案--------------------
然后再释放就没问题了。
不能直接 handle_string=...
------解决方案--------------------
------解决方案--------------------
strcpy赋值,才能释放~~
------解决方案--------------------
char *不能用=赋值,只能用=初始化。
------解决方案--------------------
http://topic.****.net/u/20110805/16/4d0528be-dd1f-4c80-b280-684c9eb8926c.html
这个问题我也问过,这是我当时的帖子,希望对你有帮助
- C/C++ code
int main(void) { char *handle_string; handle_string = (char *)calloc(12,sizeof(char)); handle_string = "d:/test.txt"; printf("%s , %d\n",handle_string,strlen(handle_string)); free(handle_string); return 0; }
这段代码运行的时候,会出现堆损坏的错误,free(handle_string,没有办法释放内存。为什么???
------解决方案--------------------
handle_string = "d:/test.txt"; 这个字符串是常量 不能free对应的地址
printf("%s , %d\n",handle_string,strlen(handle_string));
free(handle_string);
------解决方案--------------------
handle_string = (char *)calloc(12,sizeof(char));
handle_string = "d:/test.txt";
你改变handle_string的指向了。
肯定能够没发 free啊。
------解决方案--------------------
你是想赋值吧?字符串赋值是
strcpy。
这样:
strcpy(handle_string , "d:/test.txt");
------解决方案--------------------
然后再释放就没问题了。
不能直接 handle_string=...
------解决方案--------------------
------解决方案--------------------
strcpy赋值,才能释放~~
------解决方案--------------------
char *不能用=赋值,只能用=初始化。
------解决方案--------------------
http://topic.****.net/u/20110805/16/4d0528be-dd1f-4c80-b280-684c9eb8926c.html
这个问题我也问过,这是我当时的帖子,希望对你有帮助