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 }

    不明白为什么会这样。

  • 相关阅读:
    vue相关坑
    jQuery上传文件按钮美化
    大屏幕数据可视化问题
    jquery实现点击页面空白处,弹框消失
    知识点
    js数字串传参时变科学计数法
    jQuery循环遍历取值
    如何判断一个弹框是打开还是关闭状态?
    js库写法
    React版本修改内容
  • 原文地址:https://www.cnblogs.com/zanzan101/p/3327057.html
Copyright © 2011-2022 走看看