# 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