【发布时间】:2014-04-13 16:44:52
【问题描述】:
我想计算我的递归嵌套了多少,并返回函数内部创建的数组中的每个级别编号,但该代码无法正常工作(运行时显示“分段错误”):
void test (int* result[], int* counter) {
if (*counter == 0)
*result = (int**) malloc(0);
if (*counter == 5)
return;
else {
*counter = *counter + 1;
*result = (int**) realloc(*result, sizeof(int) * (*counter));
*result[*counter - 1] = *counter; // This line is wrong, and I don't know why.
test(result, counter);
}
}
void main () {
int** result;
int counter = 0;
test(result, &counter);
int i;
for (i = 0; i < 5; i++)
printf("%d\n", *result[i]);
}
我知道我可以使用单指针作为参数和返回值来做到这一点。关键是,我只是好奇。
【问题讨论】:
-
“无法正常工作”不是有用的描述。请说明您观察到的行为以及您的预期。
-
另外,不要添加多余的演员表(例如
malloc的返回)。只在需要正确程序的地方强制转换,永远不要关闭编译器。使用-Wall -Wextra向编译器询问所有警告,并适当地处理它们。*result不是int**顺便说一句。 -
为了你好,试着用
-Wall编译你的代码作为一种习惯:它会到处显示你所有的小错误;例如使用int**作为int*值的转换;main缺少整数返回(以及main的错误原型),或初始化的result变量。关于那个,malloc它是值得的,因为它可以在代码的当前状态下随机出现段错误;并按照-Wall的建议更正它(例如,拥有int** result = NULL;)会告诉你它有段错误,但不是随机的,所以你可以更正它;) -
即使是偶然使用
malloc(0)也是个坏主意;通过明确地编写它来做到这一点是一个非常糟糕的主意。您无法取消引用可靠返回的任何指针。
标签: c memory dynamic recursion allocation