char ch[]="camp";
char *p = (char *)malloc(strlen(ch));
strcpy(p,ch);
... ...
free(p);
编译没错,运行出错:
Debug Error!
DAMAGE:after Normal Block(#63) at 0x00382ca8
错误原因:释放未分配的空间
分析:
查看内存
地址 值
0x00382ca8 63
0x00382ca9 61
0x00382caa 6D
0x00382cab 70
0x00382cac 00
正是"camp",占5个字节,但指针p指向的空间只分配了4个字节(注意strlen(const char *string) returns the number of characters instring),未能释放地址0x00382ca8的空间,故报错。
解决办法:char *p = (char *)malloc(strlen(ch)+1);