提问人:Harshit Singh 提问时间:8/11/2023 最后编辑:chqrlieHarshit Singh 更新时间:8/11/2023 访问量:56
为什么局部变量的值与其赋值不同?
Why a local variable is having value different from its assigned value?
问:
当矩阵的维度为 1x2 时,该变量已经具有值,因此程序会遇到分割错误。我真的不明白问题是什么以及为什么会发生这种情况,因为当矩阵的大小为 3x3、3x4、2x2 等时,程序运行良好。i
912
#include <stdio.h>
#include <stdlib.h>
int *spiralOrder(int matrix[1][2], int matrixSize, int matrixColSize,
int *returnSize) {
*returnSize = matrixSize * matrixColSize;
int left = -1;
int right = matrixColSize - 1;
int top = 0;
int bottom = matrixSize;
int k = 0;
int i = 0;
int j = 0;
int count = 0;
int *list = (int *)calloc(*returnSize, sizeof(int));
if (matrixSize == 1) {
while (k < *returnSize) {
list[k] = matrix[j][i];
i++;
}
return list;
}
while (k < *returnSize) {
printf(" ( (%d) %d %d %d %d %d %d) ",
count++, j, i, left, right, top, bottom);
if (i < right && j == top) {
list[k] = matrix[j][i];
i++;
} else if (i == right && j < bottom) {
if (j == top) {
left++;
bottom--;
}
list[k] = matrix[j][i];
j++;
} else if (j == bottom && i > left) {
list[k] = matrix[j][i];
i--;
} else if (i == left && j > top) {
if (j == bottom) {
top++;
right--;
}
list[k] = matrix[j][i];
j--;
}
k++;
}
printf("\n");
for (int i = 0; i < *returnSize; i++) {
printf("at %i [%d] \n", i, list[i]);
}
return list;
}
int main() {
int list[1][2] = {{ 1, 2 }};
int size;
spiralOrder(list, 1, 2, &size);
}
答:
0赞
chqrlie
8/11/2023
#1
如果是以下情况,则进行特殊情况:matrixSize
1
if (matrixSize == 1) {
while (k < *returnSize) {
list[k] = matrix[j][i];
i++;
}
return list;
}
循环是一个无限循环,因为在循环体中没有改变。这会导致具有未定义行为的缓冲区溢出,最终导致分段错误。while
k
建议使用具有清晰一致的循环初始化、测试和循环索引增量的循环,以避免此类问题。for
上一个:为什么当我关闭时内存大小被覆盖
评论
while(k<*returnSize)
k
*returnSize
i
i
printf