【发布时间】:2011-01-21 03:54:27
【问题描述】:
试图理解我的问题的答案
我写了这个函数,对它的输出感到困惑
int main(int argc,char **argv){
char *p,*q;
p=malloc(1);
strcpy(p,"01234556789abcdefghijklmnopqrstuvwxyz"); //since malloc allocates atleast 1 byte
q=malloc(2);
// free(q);
printf("q=%s\n",q);
printf("p=%s\n",p);
return 0;
}
输出
q=vwxyz
p=01234556789abcdefghijklm!
谁能解释这种行为?还是这个实现是特定的?
如果 free(q) 未注释,我也会收到 SIGABRT。
【问题讨论】:
-
malloc 将您希望分配的字节数作为参数。 malloc(1) 将分配 1 个字节的内存。然后,您写入的内存远远超过一个字节,这会覆盖其他内存位置。
标签: c malloc heap-memory free