首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

栈创建有关问题

2012-09-10 
栈创建问题这是定义的栈节点:1.typedef struct _STACK_NODE2.{3.int* pData4.int length5.int top6.}ST

栈创建问题
这是定义的栈节点:
1.typedef struct _STACK_NODE  
2.{  
3. int* pData;  
4. int length;  
5. int top;  
6.}STACK_NODE;  


这是一个创建栈函数:

1.STACK_NODE* alloca_stack(int number)  
2.{  
3. STACK_NODE* pStackNode = NULL;  
4. if(0 == number)  
5. return NULL;  
6.  
7. pStackNode = (STACK_NODE*)malloc(sizeof(STACK_NODE));  
8. assert(NULL != pStackNode);  
9. memset(pStackNode, 0, sizeof(STACK_NODE));  
10.  
11. pStackNode->pData = (int*)malloc(sizeof(int) * number);  
12. if(NULL == pStackNode->pData){  
13. free(pStackNode);  
14. return NULL;  
15. }  
16.  
17. memset(pStackNode->pData, 0, sizeof(int) * number);  
18. pStackNode-> length = number;  
19. pStackNode-> top= 0;  
20. return pStackNode;  
21.}  

我不明白上述用红色标记的两行的区别?

我是这样理解的:
第一行是创建一个栈,第二行是创建栈中元素的个数。但是我觉得这样理解是很矛盾的。一个栈已经被创建了,那么它的空间大小不是已经被确定啦嘛,第二行再创建栈元素,那么这个元素的大小可能超过栈空间了,这不是违法的吗?

以上代码是我从网上看到的,希望懂行的朋友给我指点下,我该怎么理解上述两行用红颜色标记的部分呢

[解决办法]
pStackNode 指向管理栈的地方
pStackNode->pData才指向栈中的数据,当数据变多时,可以realloc扩展
[解决办法]
注意pData是个指针,pData本身属于栈节点的一部分,占用4个字节。而pData指向的数据不属于栈,只是与栈节点有关联。

热点排行