免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2768 | 回复: 8
打印 上一主题 下一主题

[C] 求助:malloc分配空间不够,并不溢出!!(在线等) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-20 16:06 |只看该作者 |倒序浏览
以下代码将25000字节的数据存储到用分配的3字节的空间,运行正常,并无提示错误。
为什么超过分配空间那么多都没出错??求助!!!在线等。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    char * p;
    p = (char *)malloc(3);  //分配3字节空间
    if(p)
    {
      printf("Memory Allocated at:%x\n",p);
      int i;
      for(i=0;i<500;i++)   //循环500次将"hello"字符串存到p中。
      strcat(p,"hello");
      printf("%s\n",p);
    }
    else
    if(p)
    free(p);
    getch();
}

论坛徽章:
0
2 [报告]
发表于 2009-05-20 16:10 |只看该作者
引用本坛某位DX的话:错误的程序不一定会有错误的结果

PS:ID。。。

论坛徽章:
0
3 [报告]
发表于 2009-05-20 16:17 |只看该作者
恰巧没有崩溃吧,空闲内存足够

论坛徽章:
0
4 [报告]
发表于 2009-05-20 16:51 |只看该作者
你RP不错,你运行个100,1000次,肯定会出问题~~~嘿嘿~~~

论坛徽章:
0
5 [报告]
发表于 2009-05-20 18:13 |只看该作者
C 语言溢出不会有运行时的提示,除非已经致命,所以必须由程序员自己来把握。

论坛徽章:
0
6 [报告]
发表于 2009-05-21 09:11 |只看该作者
x86 上的linux在建立虚拟地址到物理内存地址时是按4k的整数倍建立的,即使你申请一个字节的空间,如果这一个字节的地址还未建立影射,内核也得为你建立好包含这个地址的一大段连续空间的影射。你试试循环5000次,几乎可以肯定会运行出错。你那个代码才500次,才用到2500 + 1 bytes

论坛徽章:
0
7 [报告]
发表于 2009-05-21 09:18 |只看该作者
碰巧没有溢出到关键区域而已,数值再大就出去了,到时候就是程序运行错误了,C语言在最开始是不管你是否溢出的

论坛徽章:
0
8 [报告]
发表于 2009-05-22 13:32 |只看该作者

回复 #6 bobozhang 的帖子

解释的很透彻,高

论坛徽章:
0
9 [报告]
发表于 2009-05-22 13:33 |只看该作者

回复 #5 langue 的帖子

又学到新东西了 谢谢:wink:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP