# include <stdio.h>
# include <stdbool.h>
# include <string.h>
# include <stdlib.h>
int main()
{
char * buffer;
buffer = malloc (2);
if (buffer == NULL){
printf("big errors");
}
strcpy(buffer, "hello");
printf("buffer is %s\n", buffer);
free(buffer);
return 0;
}
我给指针/字符缓冲区分配了2个字节的内存,但是如果给它分配“hello”,它仍会打印它,而不会给我任何错误。为什么编译器不给我一个错误,告诉我没有足够的内存分配?我阅读了几个问题,询问如何检查实际分配了多少内存,但我没有找到具体的答案。 free
函数不应该确切地知道分配给buffer
的内存有多少?Malloc - >分配了多少内存?
你很幸运,你没有用你不拥有的4个额外字节覆盖任何重要的内存片段;你每次都不会那么幸运,而且会导致崩溃。 – holex 2015-03-04 12:38:17