gpt4 book ai didi

c - 二维数组充满垃圾数据......有时

转载 作者:行者123 更新时间:2023-12-04 11:12:02 26 4
gpt4 key购买 nike

我一直在研究 this HackerRank 的简单编码挑战。我决定将我的解决方案实现为 C 函数,因为用其他语言或主函数本身执行它似乎微不足道。我以为这样我会弄乱数组/指针语法几次,并且我有机会学习一些东西。

这是我的功能:

int sum_diagonal(int n, int (*arr)[n]) {
int lD, rD, sum;
for(int i = 0; i < n; ++i) {
for(int j = 0; j < n; ++j) {
if (i == j) {
rD += arr[i][j];
}
if ((i+j) == (n-1)) {
lD += arr[i][j];
}
}
}
sum = abs(lD - rD);
return sum;
}

这是调用它的 main() 函数(提供了输入矩阵的代码):

int main(){
int n;
scanf("%d",&n);
int a[n][n];
for(int a_i = 0; a_i < n; a_i++){
for(int a_j = 0; a_j < n; a_j++){
scanf("%d", &a[a_i][a_j]);
}
}
//printf("why does this make it work?");
int sum = sum_diagonal(n,a);
printf("%d", sum);
return 0;
}

有时它完全按照预期工作,有时我得到垃圾输出。但更奇怪的是,如果我取消注释主函数中的随机 printf() 调用,它似乎每次都能工作。这是怎么回事?

最佳答案

在您的代码中,您已经定义了

 int lD, rD, sum;

没有初始化,然后,你写了

 rD += arr[i][j];

lD += arr[i][j];

rDlD 是自动局部变量,未初始化。在第一次迭代中,您使用它们来读取它们的值(即 += 的 LHS)。

在那个时间点,它们的内容(值)是不确定的。正如您所做的那样,使用它们会调用 undefined behavior .

解决方案:始终初始化局部变量,例如

 int lD = 0, rD = 0, sum= 0;

关于c - 二维数组充满垃圾数据......有时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34849854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com