下面这一段代码无法正常运行:
1 #include "stdlib.h" 2 3 4 int main(int argc, char* argv[]) 5 { 6 void* result = malloc(4); 7 int* ptr = (int*) result; 8 9 10 { // 代码段A 11 for (int i = 0; i < 100; i++, ptr++) 12 { 13 *ptr = i; // 此处竟然可以越界访问没有申请到的内存空间 14 } 15 } 16 ptr = (int*) result; 17 18 19 for (int k = 0; k < 100; k++, ptr++) 20 { 21 printf("%d= %d ", ptr, *ptr); // 此处竟然可以越界访问没有申请到的内存空间 22 } 23 24 result = malloc(4); 25 char* str = (char*)result; // 本句代码运行出错,因为result为空,即上一句malloc失败! 26 char* str_t = "Hello World !"; 27 strcpy(str, str_t); 28 for (int l = 0; l < strlen(str_t); l++, str++) 29 { 30 printf("%c", *str); 31 } 32 printf(" "); 33 34 getchar(); 35 return 0; 36 }
下面这一段代码可以正常运行:
1 #include "stdlib.h" 2 3 4 int main(int argc, char* argv[]) 5 { 6 void* result = malloc(4); 7 int* ptr = (int*) result; 8 9 10 { // 代码段A 11 /*for (int i = 0; i < 100; i++, ptr++) 12 { 13 *ptr = i; // 此处竟然可以越界访问没有申请到的内存空间 14 }*/ 15 } 16 ptr = (int*) result; 17 18 19 for (int k = 0; k < 100; k++, ptr++) 20 { 21 printf("%d= %d ", ptr, *ptr); // 此处竟然可以越界访问没有申请到的内存空间 22 } 23 24 result = malloc(4); 25 char* str = (char*)result; // 本句代码可以正常运行 26 char* str_t = "Hello World !"; 27 strcpy(str, str_t); 28 for (int l = 0; l < strlen(str_t); l++, str++) 29 { 30 printf("%c", *str); 31 } 32 printf(" "); 33 34 getchar(); 35 return 0; 36 }
不明白为什么会这样。