EXC_BAD_ACCESS 使用数组时出错
EXC_BAD_ACCESS Error while using an array
我需要帮助来弄清楚这个错误到底是什么以及为什么会发生。当我调试程序时,一切似乎都运行良好!我不明白。
代码:
void WordsRandom()
{
srand((unsigned)time(NULL));
n = rand() % 10;
checkRandom[k] = n; //ERROR HERE --> THREAD 1: EXC_BAD_ACCESS
k ++; //k is set to 0 originally
rowRandom = getRandomNumber();
colRandom = getRandomNumber();
}
我不知道为什么会这样。据我所知,在这种情况下不需要使用 %d
说明符吧?如果您需要更多代码,请告诉我。
WordsRandom
正在被其他方法调用:
void horizontalOrientation()
{
size = (int)strlen(words[n]);
if((colRandom + (size - 1)) <= 9)
{
for(int j = 0; j < (strlen(words[n])); j ++)
{
puzzle[rowRandom][colRandom] = words[n][j];
colRandom ++;
}
}
else
{
do
{
WordsRandom();
horizontalOrientation();
}while((colRandom + (size - 1)) > 9);
}
}
对于垂直和对角线方向,我还有其他类似的功能。
这里有两件事很麻烦:
我没有看到数组大小 (checkRandom[]) 或用于索引它的整数值 (k) 的声明。如果您收到访问错误,那么您可能正在索引超出数组边界的内存,而不是您的内存。
我会尝试重构您的代码,以便您可以检查是否传递了数组的最大索引(大小 -1)
我需要帮助来弄清楚这个错误到底是什么以及为什么会发生。当我调试程序时,一切似乎都运行良好!我不明白。
代码:
void WordsRandom()
{
srand((unsigned)time(NULL));
n = rand() % 10;
checkRandom[k] = n; //ERROR HERE --> THREAD 1: EXC_BAD_ACCESS
k ++; //k is set to 0 originally
rowRandom = getRandomNumber();
colRandom = getRandomNumber();
}
我不知道为什么会这样。据我所知,在这种情况下不需要使用 %d
说明符吧?如果您需要更多代码,请告诉我。
WordsRandom
正在被其他方法调用:
void horizontalOrientation()
{
size = (int)strlen(words[n]);
if((colRandom + (size - 1)) <= 9)
{
for(int j = 0; j < (strlen(words[n])); j ++)
{
puzzle[rowRandom][colRandom] = words[n][j];
colRandom ++;
}
}
else
{
do
{
WordsRandom();
horizontalOrientation();
}while((colRandom + (size - 1)) > 9);
}
}
对于垂直和对角线方向,我还有其他类似的功能。
这里有两件事很麻烦:
我没有看到数组大小 (checkRandom[]) 或用于索引它的整数值 (k) 的声明。如果您收到访问错误,那么您可能正在索引超出数组边界的内存,而不是您的内存。
我会尝试重构您的代码,以便您可以检查是否传递了数组的最大索引(大小 -1)