从文本文件读取数字存入矩阵时遇stream!=nullptr空指针问题求助
解决文件读取矩阵时的空指针错误
我来帮你排查下问题,你遇到的stream!=nullptr错误根源很明确,咱们一步步拆解:
问题分析
文件打开失败后未终止程序
当fopen返回NULL(比如文件找不到、权限不够),你只打印了错误信息,但程序还是继续执行后面的for循环。这时候用NULL的文件指针去调用fscanf_s,必然触发空指针异常——就像你要打开一扇不存在的门,还硬要往里走一样。printf用法错误
你写的printf("%d", &MazeMatrix);是在打印数组的首地址,而不是数组里存储的数字,这根本没法验证读取结果。文件资源未释放
就算文件打开成功,你也没调用fclose关闭文件,会造成资源泄漏。
修正后的代码
#include <stdio.h> #include <stdlib.h> // 用于exit函数 int main() { int MazeMatrix[64]; int i; FILE *mazefile; // 打开文件 mazefile = fopen("m5.txt","r"); if (mazefile == NULL) { printf("无法打开文件!请检查文件路径或权限\n"); exit(EXIT_FAILURE); // 直接终止程序,避免后续错误操作 } // 读取32个整数到数组,同时检查读取是否成功 for (i = 0; i < 32; i++) { if (fscanf_s(mazefile, "%d", &MazeMatrix[i]) != 1) { printf("读取第%d个数字失败!可能文件内容不足\n", i+1); fclose(mazefile); // 出错时也要记得关闭文件 exit(EXIT_FAILURE); } } // 打印读取结果,验证正确性 printf("成功读取的矩阵内容:\n"); for (i = 0; i < 32; i++) { printf("%d ", MazeMatrix[i]); if ((i+1) % 8 == 0) { // 每8个数字换行,排版更清晰 printf("\n"); } } fclose(mazefile); // 用完文件必须关闭 return 0; }
额外注意事项
- 确保
m5.txt和你的可执行文件在同一目录,或者使用绝对路径(Windows下写"C:\\你的路径\\m5.txt",Linux/macOS下写"/home/你的路径/m5.txt")。 - 如果你不是在Visual Studio环境下编译,建议用标准C的
fscanf代替fscanf_s——fscanf_s是微软的安全扩展,移植性很差。
内容的提问来源于stack exchange,提问作者M.Stones
相关产品推荐
相关产品推荐

