C语言稀疏矩阵检测转置代码在VSCode运行不全在线编译器正常
问题分析与修复方案
根因定位
本地VSCode运行异常、在线编译器运行正常的差异来自代码的未定义行为:
changematrix函数中定义的int b[100][100], temp, counter = 0;行里,temp变量仅做了声明,没有初始化赋值就直接在后续逻辑里执行temp++、作为数组下标访问b[temp]。- C标准明确规定:函数内的局部非静态变量不会自动初始化为0,初始值为栈内存上的随机残留值。在线编译器出于调试友好的设计,通常会默认把栈内存清零,所以
temp刚好从0开始,代码能正常运行;而VSCode使用的本地编译器没有做这个额外处理,随机值的temp会导致数组越界写入,轻则后续打印逻辑读取到错误值、无输出,重则直接程序崩溃。
修复方法
只需要给temp变量赋初始值0即可,同时可以优化老式的函数声明写法,避免潜在参数不匹配问题:
1. 单点修复(仅修改出错行)
将changematrix函数内的变量定义行修改为:
int b[100][100], temp = 0, counter = 0;
2. 完整修复后的代码
#include <stdio.h> // 优化函数声明,明确参数列表,避免参数传递错误 int checksparse(int array[100][100], int r, int c); int changematrix(int array[100][100], int r, int c); int main() { int a[100][100]; int i, j, r, c; printf("Enter number of rows and columns in the matrix\n"); scanf("%d%d", &r, &c); printf("\nEnter the elements in the matrix"); for (i = 0; i < r; i++) { for (j = 0; j < c; j++) { printf("\na[%d][%d] = ", i, j); scanf("%d", &a[i][j]); } } int check = checksparse(a, r, c); if (check == 1) { printf("\nIts a sparse matrix\n"); changematrix(a, r, c); } else if (check == 0) { printf("\nIts not a sparse matrix"); } return 0; } int checksparse(int array[100][100], int r, int c) { int counter = 0, flag = 1; for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { if (array[i][j] == 0) counter++; } } if (counter > ((r * c) / 2)) { return flag; } else { flag = 0; return flag; } } int changematrix(int array[100][100], int r, int c) { // 给temp赋初始值0,修复未初始化问题 int b[100][100], temp = 0, counter = 0; for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { if (array[i][j] != 0) { b[temp][0] = i; b[temp][1] = j; b[temp][2] = array[i][j]; temp++; counter++; } } } printf("\nSparse Matrix : \n"); for (int i = 0; i < counter; i++) { for (int j = 0; j < 3; j++) { printf("%d ", b[i][j]); printf("\t"); } printf("\n"); } printf("\nTranspose of Sparse Matrix : \n"); for (int i = 0; i < 3; i++) { for (int j = 0; j < counter; j++) { printf("%d ", b[j][i]); printf("\t"); } printf("\n"); } return 0; }
内容的提问来源于stack exchange,提问作者beserker5781
相关产品推荐
相关产品推荐

