繁体   English   中英

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

[英]Two conflicting for loops within a for loop within a function

我在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个函数调用和对级别的引用时,循环将运行。 如果我保留所有函数调用,而只删除初始for循环中的两个for循环之一,那么一切也都很好。 我只是看不到for循环内还有一个通用循环与这些函数调用不兼容,它们似乎根本不相关。任何建议都将不胜感激。

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

接下来,您将-1分配给curlevel指向的内存位置。 由于curlevel并不指向任何特定的地方,所以任何事情都可能发生(“未定义的行为”)。 在您的情况下,您尝试访问非您的内存并遇到分段错误。

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

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

或者,如果出于特殊原因,为什么需要将该指针作为指针,则动态分配一些可用于存储整数的内存:

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

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

free(curlevel);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM