博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于malloc的一个未解决的疑问
阅读量:7070 次
发布时间:2019-06-28

本文共 1720 字,大约阅读时间需要 5 分钟。

下面这一段代码无法正常运行:

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=\t%d\n", 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("\n");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=\t%d\n", 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("\n");33 34     getchar();35     return 0;36 }

不明白为什么会这样。

转载于:https://www.cnblogs.com/zanzan101/p/3327057.html

你可能感兴趣的文章
Redis中Value使用hash类型的效率是普通String的两倍
查看>>
爪哇国新游记之八----读写文件及数组排序
查看>>
[Android]在Dagger 2中使用RxJava来进行异步注入(翻译)
查看>>
是技术还是态度,网易的视频Title
查看>>
ES 處於“initializing”狀態,此時主節點正在嘗試將分片分配到集群中的數據節點。 如果您看到分片仍處於初始化或未分配狀態太長時間,則可能是您的集群不穩定的警告信號。...
查看>>
切换RequiredFieldValidator和RegularExpressionValidator提示信息的控件
查看>>
基于类的封装[基础]
查看>>
android studio插件提升工作效率
查看>>
What is VMR(Video Mixing Render)-From MSDN
查看>>
Linux下安装nmap扫描工具
查看>>
git 创建branch分支【转】
查看>>
北京某公司.NET面试题
查看>>
解决异常“SqlParameterCollection 只接受非空的 SqlParameter 类型对象。”
查看>>
PostgreSQL通过mysql_fdw访问MySQL数据库
查看>>
REST风格的原则
查看>>
Struts分页的一个实现
查看>>
[LintCode] Nuts & Bolts Problem 螺栓螺母问题
查看>>
53.2. group_concat() 列传行
查看>>
I.MX6 SHT20 Linux 驱动移植
查看>>
7.4. String
查看>>