作者sunneo (艾斯寇德)
看板C_and_CPP
标题Re: [问题] 关於struct的记忆体配置..
时间Mon May 4 23:37:44 2009
※ 引述《rrosymoon (紫月)》之铭言:
: 请问一下喔~我看书上是说,struct跟阵列很像,但它可以
: 将多种不同型态的资料,集合在一起。
: 那,若是使用动态配置记忆体的方式,程式是一次帮它里面
: 所有的资料型态都给予记忆体吗?还是可以只给指定的某一
: 个资料型态记忆体呢?
: 比如:
: struct word{
: char *word_name;
: struct word *next;
: };
: ...
: wp=(struct word *)malloc(sizeof(struct word));
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: 这个部份,程式会帮wp->word_name跟wp->next都分别
: 配置记忆体?所以一次会增加二笔资料的记忆体?
: 还是说只有使用到的会给记忆体呢?
: 那有办法只单独配置wp->word_name的记忆体空间吗?
你要把函式的责任厘清
malloc就是malloc
上述动作只是说「我有一个指标叫做wp,指向一块sizeof(struct word) 的空间」
所以里面的word_name跟next指标都有该有的空间。
有空间才能存放资料,因此你是一定要给next指标一个空间的。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.227.127.8
1F:→ sunneo:除非你的设计上允许word_name跟next共用位址 05/04 23:39
2F:推 rrosymoon:嗯..所以意思是说,使用struct的话,一定会多出一个没有 05/04 23:41
3F:→ sunneo:而那位址是透过转换过的(如xor) 才能这麽做 05/04 23:41
4F:→ rrosymoon:使用到的空间罗?(就是最後一笔struct中的next的空间) 05/04 23:41
5F:→ sunneo:有啊 你有使用到 你终究要用他存放下一笔资料的位址吧 05/04 23:42
6F:→ rrosymoon:已经是最後一笔了,所以next就没有下一笔的位置可以指了 05/04 23:42
7F:→ sunneo:你不能假设那一定是最後一笔资料 05/04 23:43
8F:→ sunneo:如果是最後一笔 next通常是放NULL 05/04 23:43
9F:→ sunneo:因为任何结点(struct word)都有可能是目前的最後一笔 05/04 23:44
10F:→ sunneo:如果你希望next也能利用到 那就做成环状list吧 05/04 23:45
11F:推 rrosymoon:嗯..那设成NULL的话,是不是就不会占记忆体空间呢? 05/04 23:48
12F:→ rrosymoon:还是设成NULL只是用来判断是不是到最後一笔? 05/04 23:48
13F:→ sunneo:只是用来判断最後一笔 05/04 23:50
14F:推 rrosymoon:喔..所以最後一笔的next必需设成NULL,由此判断是否到最 05/04 23:53
15F:→ rrosymoon:後.. 这样就没有浪费掉最後的那个next空间了.. 05/04 23:54
16F:→ rrosymoon:了解了~谢谢sunneo大大的解说~^___^ 05/04 23:55
17F:→ doggingg:指标看熟一点,用动态记忆体配置 05/07 15:13