下面这一段代码无法正常运行:
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=\t%d\n", 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("\n");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=\t%d\n", 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("\n");33 34 getchar();35 return 0;36 }
不明白为什么会这样。