免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: KBTiller
打印 上一主题 下一主题

特邀专家在线答疑——名不正则言不顺 一网打尽C语言基本概念 [复制链接]

论坛徽章:
0
101 [报告]
发表于 2011-04-25 23:00 |只看该作者
回复 98# DNFCF


    其实是一种未定义行为,未定义行为往往比你想象的还要未定义,偶尔恰好和你预想的一致,也并非绝无可能

论坛徽章:
0
102 [报告]
发表于 2011-04-26 09:45 |只看该作者
大侠们,问个问题?
malloc分配完数据空间后,在用free释放的时候,free是怎么知道需要释放多大的空间的。
struct data
{
    int a;
    int b;
};
struct data *p;
p = (struct data*)malloc(sizeof(struct data)*5);
free(p);

论坛徽章:
0
103 [报告]
发表于 2011-04-26 10:50 |只看该作者
关于定义,我先来说一个很受伤的东西

比如:

for (int i = 0; i < xxoo; i++) { do_sth();}

// xxooooxxxxooooxx

for (int i = 0; i < ooxx; i++} { do_others();}

就在VC下会编译出错
txdgtwpv 发表于 2011-04-19 13:09



    vc 2010可以编译

论坛徽章:
2
天蝎座
日期:2014-03-28 10:18:052015年亚洲杯之乌兹别克斯坦
日期:2015-02-10 11:32:25
104 [报告]
发表于 2011-04-26 11:12 |只看该作者
大侠们,问个问题?
malloc分配完数据空间后,在用free释放的时候,free是怎么知道需要释放多大的空间的。 ...
contiguous 发表于 2011-04-26 09:45



    操作系统的内存管理知道这块分配的内存的大小

论坛徽章:
0
105 [报告]
发表于 2011-04-26 11:15 |只看该作者
VC可是很多人的圣物

在很多人心中 , VC = C++++
txdgtwpv 发表于 2011-04-19 15:44



    C++++ 那是C#  

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
106 [报告]
发表于 2011-04-26 11:24 |只看该作者
本帖最后由 rover12421 于 2011-04-26 11:52 编辑

回复 103# xue-feng


    这个是作用域的问题,vc6是没有实现语句作用域(应该没说错吧)的,貌似在vs2005之后才实现的,

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
107 [报告]
发表于 2011-04-26 11:33 |只看该作者
回复 98# DNFCF


    malloc,分配空间,类似于告诉系统你占用了多少空间,这块空间全由你来处理,系统不会再用作其他,free,类似于告诉系统,我占用的空间不需要了,系统可以拿去做其他事了。free之后的空间并不一定立即被用作其他,所以数据还是在的,这也是为啥free之后建议用NULL的原因了。比喻不咋的,仅当做一种理解吧

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
108 [报告]
发表于 2011-04-26 11:50 |只看该作者
说到enum,我常用的是数据处理上,特别是需要取个数的时候很方便。
enum
{
        a,
        b,
        ...
        max
};
用enum原本也是用来使无意义的数字看起来有意义,有时候需要用for,while之类的连续读取数据,这样我的数据怎么增减,只需改enum,而不用动原程序了

论坛徽章:
0
109 [报告]
发表于 2011-04-26 12:30 |只看该作者
回复 102# contiguous


    指针不是有类型的么??应该是通过类型来释放的大小的。。。。。
个人理解而已,不敢确定!!!

论坛徽章:
0
110 [报告]
发表于 2011-04-26 12:35 |只看该作者
回复 99# KBTiller


    那free到底做了什么呢???他所谓的释放内存到底做了什么呢???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP