首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符串指针的free有关问题

2012-09-23 
字符串指针的free问题代码如下,在释放temp时,出错:C/C++ codechar* str a:{c:890,d:12,f:{x:87,kdla:81

字符串指针的free问题
代码如下,在释放temp时,出错:

C/C++ code
char* str = "a:{c:890,d:12,f:{x:87,kdla:81923,nskfl:{abc:{dflfd:8029301}}},b:{u:90},uds:1230}";char* temp = (char*)malloc(sizeof(char)*strlen(str)+1);strcpy(temp,str);temp += strlen(str);free(temp);//这里*temp='\0',应该没有越界,为何出错?


[解决办法]
free()释放的是指针指向的内存!注意!释放的是内存,不是指针!指针并没有被释放,指针仍然指向原来的存储空间。
这里面你的temp指向的不是malloc开辟的那片内存空间
C/C++ code
#include<stdio.h>#include<string.h>#include<stdlib.h>void main(){char* str = "a:{c:890,d:12,f:{x:87,kdla:81923,nskfl:{abc:{dflfd:8029301}}},b:{u:90},uds:1230}";char* temp = (char*)malloc(sizeof(char)*strlen(str)+1);strcpy(temp,str);//temp += strlen(str);free(temp);//这里*temp='\0',应该没有越界,为何出错?}
[解决办法]
temp += strlen(str);
这个是你把指针指到这个动态内存的最后了,还free,当然错了
[解决办法]
free的指针必须是你malloc得到的指针,不能有任何更改
[解决办法]
malloc的时候系统/运行时记录了申请的内存空间的首地址和大小, 
free的时候自然应该传当初的地址, 

地址变了, free找不着对应的记录, 也就无法释放了.
[解决办法]
temp += strlen(str); 

temp不是被偏移了吗?
[解决办法]
free()的必须是malloc()分配的地址首地址
因为在这个地址之前,记录了一些数据(比如分配的内存大小),这个是free()要用到的,你把指针指向的地址改变了,free()就找不到这些数据了,代码就挂了。
[解决办法]
free函数只能用来释放动态申请的内存。不是你想释放哪儿就释放哪儿的。
[解决办法]
探讨
free()释放的是指针指向的内存!注意!释放的是内存,不是指针!指针并没有被释放,指针仍然指向原来的存储空间。
这里面你的temp指向的不是malloc开辟的那片内存空间

C/C++ code

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
char* str = "a:{c:89……

热点排行