免费注册 查看新帖 |

Chinaunix

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

[C] 问题代码的迷惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-26 20:06 |只看该作者 |倒序浏览
下面这两段代码在分配内存的时候只分配了一个整形数长度的空间,但是在接下来的语句中在未分配的单元中进行了非法写。
但是第二段代码运行无错,第一段代码运行时提示: glibc detected *** invalid next size(fast) 的出错信息。
问大家,两个赋值语句的不同,造成对运行结果不同的原因是什么?

  1. #include <stdlib.h>

  2. int main(int argc, char *argv[])
  3. {
  4.         int *p = (int *)malloc(sizeof(int));
  5.         int i;

  6.         for (i = 0; i < 12; i++) {
  7. //                *(p+i) = i + 31;
  8.                 *(p+i) = i;
  9.         }

  10.         free(p);
  11.         return 0;
  12. }
复制代码

  1. #include <stdlib.h>

  2. int main(int argc, char *argv[])
  3. {
  4.         int *p = (int *)malloc(sizeof(int));
  5.         int i;

  6.         for (i = 0; i < 12; i++) {
  7.                 *(p+i) = i + 31;
  8. //                *(p+i) = i;
  9.         }

  10.         free(p);
  11.         return 0;
  12. }
复制代码

[ 本帖最后由 什么名 于 2008-11-26 20:09 编辑 ]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2008-11-26 20:28 |只看该作者
建议不要去操作非法内存。后果不可预料

论坛徽章:
0
3 [报告]
发表于 2008-11-26 21:02 |只看该作者
请问楼主用的编译器是?

我在gcc下编译,没有给任何错误提示

不过正如2楼所说,程序存在潜在危险

[ 本帖最后由 zhuhefang2006 于 2008-11-26 21:05 编辑 ]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2008-11-26 21:16 |只看该作者
原帖由 zhuhefang2006 于 2008-11-26 21:02 发表
请问楼主用的编译器是?

我在gcc下编译,没有给任何错误提示

不过正如2楼所说,程序存在潜在危险


我觉得如果不想搞一些缓冲区溢出之类的攻击试验的话,平时就不要让你的程序操作非法内存。出的问题是不可预料的。

好好的利用你让系统给你的东西,完成你的任务即可。

论坛徽章:
0
5 [报告]
发表于 2008-11-26 22:04 |只看该作者
不要非法访问,会被捕滴

论坛徽章:
0
6 [报告]
发表于 2008-11-26 22:14 |只看该作者
好神奇,

论坛徽章:
3
天蝎座
日期:2014-10-25 13:44:312015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:31
7 [报告]
发表于 2008-11-26 22:23 |只看该作者
XXX老大说:错误的动作,不一定导致错误的结果。

貌似是这样说的。

论坛徽章:
0
8 [报告]
发表于 2008-11-26 22:23 |只看该作者

回复 #1 什么名 的帖子

个人感觉是随机的,你多试几遍试试,重启系统再试试。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2008-11-26 22:24 |只看该作者
经常有人发帖问类似这样的问题,比如超出缓冲区写操作,编译时候或者执行的时候没有错误,这是为什么等等。这个问题不用深究了。个人使用的时候,确保不要产生非法操作

论坛徽章:
0
10 [报告]
发表于 2008-11-26 22:29 |只看该作者
gcc 已经为 LZ 的代码擦屁股了

没看到运行时显示: glibc detected *** invalid next size(fast)  吗?

这是gcc 的一个补救措施
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP