【发布时间】:2013-11-23 04:07:15
【问题描述】:
这是我编写的一个快速测试 C 程序,用于查看结构内存分配的工作原理...
#include <stdio.h>
#include <stdlib.h>
typedef struct _node {
int kk;
int zz;
} node;
node ** createNode(){
node** res = (node**) malloc(sizeof(node*)*10);
int i,j;
for(i= 0;i<10;i++){
res[i] = (node*) malloc(sizeof(node)*10);
for(j=0;j<10;j++){
res[i][j].kk=33;
}
}
return res;
}
int main(void) {
node ** g = createNode();
printf("%d",g[0][0].kk);
return 0;
}
此程序打印值“33”。现在这对我来说已经很明显了,但仔细想想,我不明白为什么......
现在想想,变量g不应该是node ***类型吗?
打印语句看起来像printf("%d",g[0][0]->kk);?
在第二个版本中,我基本上做了与原始代码相同的事情,但我有一个指向节点而不是实际节点的指针。
就第一个是静态分配的(我认为)和第二个是动态分配的而言,两者之间有什么区别......我在 createNode() 函数中创建的节点值不应该在外部被销毁该功能的范围?
只是有点困惑:S 我需要有人为我澄清一下,node** 和 node*** 之间有什么区别
【问题讨论】:
-
如果您曾经连续输入 3 颗星,您应该退后一步,考虑重新设计您的代码或放入另一个抽象。
标签: c memory-management struct