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 }

    不明白为什么会这样。

  • 相关阅读:
    正则表达式
    9.4、分布式进程
    Linux文件编辑工具——VIM
    14 Linux网络管理
    13.Linux系统服务
    12.Linux进程管理
    11.Linux磁盘管理——lvm,raid
    10.Linux磁盘管理
    09.Linux软件包管理——(YUM 、RPM)
    07.Linux 压缩打包
  • 原文地址:https://www.cnblogs.com/zanzan101/p/3327057.html
Copyright © 2011-2022 走看看