关于c++全局变量和局部变量问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 05:16:52
全局变量定义了一个树的节点TreeNode rootnode;
typedef struct treeNode
{
struct treeNode * child[10];
struct treeNode * sibling;
int lineno;
int trace_of_node[30];
char type[30];
char name[30];

}TreeNode;
在函数里,我想通过一个循环,不断的往树里加入新的节点
可数函数里的地址在函数外就失效了

如果用static在函数里定义节点,循环的效果又没了,因为static只能定义一次

请问高手这个问题怎么解决
但是如果TreeNode temp失效了的话
TreeNode*不是没有指向了吗?

怎么让TreeNode temp也不失效呢

我说得很清楚啊 , 动态内存的那块内存它是在你申请后就一直存在,永远存在!直到你释放后或关机了就不存在了..

对使用动态内存
一个程序使用的内存一般分为4个部分
你说的函数外就失效的那部分区域叫栈区,一般函数的局部变量存在里面,这些变量在函数调用结束后就不存在了
而所谓的 动态内存是在 堆区, 这里的东西是你申请后就拿来用,并且一直存在直到你释放他们.
你说的这个问题就可以用动态内存存储结点,
具体是这样做的
TreeNode * ptTNode = new TreeNode;
这里ptTNode是一个指向TreeNode结构体的指针,你申请了一块大小和TreeNode一样内存,把他的地址给了ptTNode指针,以后你想使用这块内存时操作这个指针就行了.
你如果想释放它用下面语句
Delete(ptTNode);
建议你去看下链表的内容

不过在使用动态内存时要小心 内存泄漏.内存泄漏是指你申请了动态内存,然后没有释放,那么在你失去那个指向该内存的指针后就再也无法使用它了.如果有很多内存泄漏有可能你就没有动态内存用了.所以要避免内存泄露

你用动态内存不就行了嘛
你说函数外无效的意思是使用的栈空间,而堆空间不会失效哈

用 new申请动态内存~~~
就像建立链表一样~~~~
这样就可以往树里不断加入新的节点了~~~