栈创建问题
这是定义的栈节点:
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指向的数据不属于栈,只是与栈节点有关联。