可能重复:
malloc(0) 有什么意义?
为什么 malloc(0) 实际上会返回一个有效的写入指针?
char *str = NULL;
str = (char*)malloc(0); // allocate 0 bytes ?
printf("Pointer of str: %p\n", str);
strcpy(str, "A very long string ...................");
printf("Value of str: %s", str);
free(str); // Causes crash if str is too long
输出:
Pointer of str: 0xa9d010
Aborted
Value of str: A very long string ...................
什么时候str
更短,那么它就可以正常工作。
顺便说一句:为了编译,我使用带有“-D_FORTIY_SOURCE=0 -fno-stack-protector”的 GCC
*** glibc detected *** ..: free(): invalid next size (fast): 0x0000000000a9d010 ***