zoukankan      html  css  js  c++  java
  • 关于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 }

    不明白为什么会这样。

  • 相关阅读:
    又见Alice and Bob
    算法7-6:图的遍历——广度优先搜索
    算法7-5:图的遍历——深度优先搜索
    水池数目
    过河问题
    括号配对问题
    C# 客户端判断是否安装office03、07或WPS
    C# json
    开源cms
    可执行代码(Executable Code)目标代码(object code)
  • 原文地址:https://www.cnblogs.com/zanzan101/p/3327057.html
Copyright © 2011-2022 走看看