• 关于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 }

    不明白为什么会这样。

  • 相关阅读:
    python
    python
    python
    python
    python
    python
    python
    python
    [ThinkPHP] 从一个表中获得栏目对应的ID,从另一个表获得属于这些栏目的文章
    [thinkPHP] buildSql可以查看tp CURD操作对应的SQL
  • 原文地址:https://www.cnblogs.com/zanzan101/p/3327057.html
Copyright © 2020-2023  润新知