函数中for循环内的两个冲突for循环

时间:2014-07-16 01:12:55

标签: c

我在for循环中有两个for循环,如下所示:

for(n = 0; n < 5; ++n){


    for(i = 0; i < 5; ++i){ printf("in first loop");}  


    for(p = 0; p < 5; ++p){printf("in second loop");}   

}

我已将它们简化为上述内容,以试图弄清楚什么是错误的。当我删除其中一个循环时,一切都运行正常与另一个循环。当我把它们放在一起时,程序崩溃了。现在它们恰好位于一个函数内部,我知道这个问题与问题直接相关,因为整个for循环运行良好。这是函数的其余部分,位于循环上方:

ArrayList* levels = allocDArray(1, sizeof(ArrayList));
levels->printerFunction = &printArray;
int* curlevel; *curlevel = -1;

getPositions(tree->root, levels, curlevel);

ArrayList* tempArray = allocDArray(1, sizeof(int));
ArrayList* curList;

当我注释掉3个函数调用和对level的引用时,循环将运行。如果我保留所有函数调用,并且只是在初始for循环中删除两个for循环中的一个,那么一切都运行正常。我只是看不出如何在这个for循环中有一个更通用的循环与这些函数调用不兼容,它们似乎根本不相关..任何建议都将不胜感激..

1 个答案:

答案 0 :(得分:2)

您将curlevel声明为int*,这意味着它是指向包含整数的内存的指针,但您不会初始化指针。这意味着它只是随意指向任何地方。

接下来,您将-1分配到curlevel所指向的内存中的该位置。由于curlevel并不指向任何特定的地方,因此任何事情都可能发生(&#34;未定义的行为&#34;)。在您的情况下,您尝试访问不属于您的内存并获得分段错误。

相反,您应该只使用整数,而不是指向一个整数的指针:

int curlevel = -1;
getPositions(tree->root, levels, &curlevel);

或者,如果您有特殊原因需要指针,请动态分配一些可用于存储整数的内存:

int *curlevel = malloc(sizeof(int));
*curlevel = -1;
getPositions(tree->root, levels, curlevel);

稍后,当不再需要该内存时,您可以再次释放它:

free(curlevel);