免费注册 查看新帖 |

Chinaunix

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

咋不溢出捏 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-20 19:54 |只看该作者 |倒序浏览

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

  4. int main(){
  5.         char *p=(char *)malloc(5*sizeof(char));
  6.         //strcpy(p,"abcdefghigi");
  7.         int i=0;
  8.         char *tmp=p;
  9.         for(i;i<10;i++){
  10.                 *tmp='a';
  11.                 tmp++;
  12.         }
  13.         printf("%d\n",strlen(p));
  14.         printf("%s\n",p);
  15.         free(p);

  16.         return 0;
  17. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2009-10-20 20:24 |只看该作者
这个问题牛B,求甚解!

论坛徽章:
0
3 [报告]
发表于 2009-10-20 20:27 |只看该作者
gcc 版本 4.3.2 (GCC)
这个是我的gcc版本
今天无意间试了一下,居然没有溢出,不知道为啥.

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
4 [报告]
发表于 2009-10-20 20:30 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2009-10-20 20:32 |只看该作者

回复 #4 c/unix 的帖子

呃...

论坛徽章:
0
6 [报告]
发表于 2009-10-20 20:36 |只看该作者
我的理解是:
如果是自动变量:char a[10];如果越界,可能就马上出错了。因为可能覆盖了重要的盏指针。
但是堆中分配的空间,malloc分配,并不是就真的只分配5字节给你,可能一次给你的是比较大的空间。
只要访问还在那部分空间上,可能就不会出问题。具体请大牛讲讲。。

论坛徽章:
0
7 [报告]
发表于 2009-10-20 20:44 |只看该作者
Remember the point: C/C++ will NOT catch the errors for you.

论坛徽章:
0
8 [报告]
发表于 2009-10-20 20:48 |只看该作者
呵呵,最近总是发现怪问题.
恩,写代码还是要按套路来的,咔咔,不然运行着就来个segment fault.

论坛徽章:
0
9 [报告]
发表于 2009-10-20 21:00 |只看该作者
把10换成13,14试试!
f 该用户已被删除
10 [报告]
发表于 2009-10-20 21:09 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP