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 }

    不明白为什么会这样。

  • 相关阅读:
    C++学习(c++17)——2.X.使用string和string_view
    C++学习(c++17)——1.3一个小程序(part2.Datebase类)
    论++i + ++i + ++i
    C++学习(c++17)——1.3 一个小程序(part1.Employee类)
    C++学习(c++17)——1.2 稍微深入研究C++
    VS2019社区版关于Qt的设置
    C++学习(c++17)——1.1 C++基础知识
    2020杭电多校第五场
    2020杭电多校第四场
    2020杭电多校第三场
  • 原文地址:https://www.cnblogs.com/zanzan101/p/3327057.html
Copyright © 2011-2022 走看看