关于malloc的一个未解决的疑问

下面这一段代码无法正常运行:

 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 }

不明白为什么会这样。

原文地址:https://www.cnblogs.com/zanzan101/p/3327057.html