字符串指针的free问题
代码如下,在释放temp时,出错:
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',应该没有越界,为何出错?
#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函数只能用来释放动态申请的内存。不是你想释放哪儿就释放哪儿的。
[解决办法]