w******h 发帖数: 16 | 1 【 以下文字转载自 Programming 讨论区 】
发信人: windrush (just do it), 信区: Programming
标 题: 大家新年好。 请教一个 c interview question
发信站: BBS 未名空间站 (Mon Feb 15 14:53:21 2010, 美东)
Func1 用来create 一个指针数组。每个指针指向一个struct node myNode
void Func1 (myNode*** p)
{
// len is a global value
myNode** tmp;
tmp = (myNode**) malloc(sizeof(myNode*) * len);
p = &tmp;
……
for (int i=0; i
{
(*p)[i] = (myNode*)malloc(sizeof(myNode));
……
}
}
Func2用来处理这个指针数组和回收memory
void Func2 (void)
{
myNode** p;
| t**n 发帖数: 272 | | x***y 发帖数: 633 | 3 Not p = &tmp, but *p=tmp.
【在 w******h 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 发信人: windrush (just do it), 信区: Programming : 标 题: 大家新年好。 请教一个 c interview question : 发信站: BBS 未名空间站 (Mon Feb 15 14:53:21 2010, 美东) : Func1 用来create 一个指针数组。每个指针指向一个struct node myNode : void Func1 (myNode*** p) : { : // len is a global value : myNode** tmp; : tmp = (myNode**) malloc(sizeof(myNode*) * len);
| H*X 发帖数: 281 | 4 你用一个数组存放指针, 为什么不用数组来同样存放mynode,这样你只要2个连续的空间
, free的时候, 也就是free 2次, 避免了用for循环去free | l*******g 发帖数: 8 | 5 我怎么觉得,在函数Func2()里,执行Func1(&p),&p是一个常量地址,不能在函数
Func1()里被重新赋值。 | w******h 发帖数: 16 | 6 原来的代码是有这个问题。 把 p = &tmp 改成 *p=tmp 应该可以了。
谢谢楼上各位的回答。 | l********e 发帖数: 6 | | l********e 发帖数: 6 | 8 My bad, not read carefully. should be *p = tmp so that allocated memory can
be returned to caller. |
|