user-0 提问: 读写文件的bug?

回复:
user: user-0
content: #include<stdio.h> int main() { 	FILE *fp; 	fopen("D:\新建文件夹\Dec\1.txt", "r"); 	if (fp == NULL) 		return -1; 	else 		printf("file open success!");	 	fclose(fp); 	return 0;   } 我发现刚开始这段就有问题，路径没问题的话，段错误吗

user: user-0
content: 谢谢回复！关于return的返回值的问题已经改过来了，程序能够运行出结果，但是会报错。

user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: #include <stdio.h> #include<stdlib.h> #include<string.h> #define N 10  typedef struct {     int **p;     int row;     int col; }Matrix;  int input_mat(FILE *fp, Matrix *mat);            //输入矩阵 int get_row_col(FILE *fp, Matrix *mat, int len); //获取多个矩阵各自的行数、列数 void delete_mat(Matrix *mat, int mat_number);       //释放给矩阵分配的空间 Matrix get_product(Matrix *mat, int mat_num); Matrix get_product_2(Matrix mat1, Matrix mat2); void fopen_s(FILE **fp, const char *filename, const char *openmode);  int main() {     FILE *fp; //打开文件     fopen_s(&fp, "1.txt", "r");     if (fp == NULL)         return -1;     Matrix mat[N];    // 定义一个一维的结构数组     int mat_number;     mat_number = input_mat(fp, mat);     printf("%d", mat_number);     Matrix product = get_product(mat, mat_number);     delete_mat(mat, mat_number);     delete_mat(&product, 0);     //关闭文件     fclose(fp);     return 0; }  int input_mat(FILE *fp, Matrix *mat) {     int mat_number = get_row_col(fp, mat, N);     rewind(fp);     for (int i = 0; i <= mat_number; ++i)     {         mat[i].p = (int **)malloc(sizeof(int *) * mat[i].row);    //分配内存         for (int j = 0; j < mat[i].row; ++j)         {             mat[i].p[j] = (int *)malloc(sizeof(int) * mat[i].col);             for (int k = 0; k < mat[i].col; ++k)             {                 fscanf_s(fp, "%d", &(mat[i].p[j][k]));             }         }     }     return mat_number; } int get_row_col(FILE *fp, Matrix *mat, int len) {     for (int i = 0; i < len; ++i) //初始化？     {         mat[i].col = 0;         mat[i].row = 0;     }     int ch;     int state_row = 0;     int state_col = 0;     int index_arr = 0;     while ((ch = fgetc(fp)) != EOF)     {         if (ch != '\n' && ch != ' ' && state_col == 0)         {             ++mat[index_arr].col;         }         else if (ch != '\n' && ch != ' ' && state_col == 1)         {             state_row = 0;         }         else if (ch == '\n' && state_row == 0)         {             state_row = 1;             state_col = 1;             ++mat[index_arr].row;         }         else if (ch == '\n' && state_row == 1)         {             state_row = 0;             state_col = 0;             ++index_arr;         }     }      return index_arr;    /*return index_arr应该放在while外面，不然index_arr应该只会为1或者为0*/ } Matrix get_product(Matrix *mat, int mat_number) {     Matrix product = mat[0];     for (int i = 1; i <= mat_number; ++i)     {         product = get_product_2(product, mat[i]);     }     int i, j;     FILE *fp1;     fopen_s(&fp1, "H:\\2.txt", "w");     if (fp1 == NULL)         exit(0);     else         for (i = 0; i < product.row; i++)         {             for (j = 0; j < product.col; j++)             {                 fprintf(fp1, "%d", product.p[i][j]);             }             printf("\n");         }     fclose(fp1);     return product; }  Matrix get_product_2(Matrix mat1, Matrix mat2) {     Matrix product;     product.col = mat1.col;     product.row = mat2.row;      product.p = (int **)malloc(sizeof(int *) * product.row);     for (int i = 0; i < product.col; ++i)     {         product.p[i] = (int *)malloc(sizeof(int) * product.col);     }     for (int i = 0; i < product.row; ++i)     {         for (int j = 0; j < product.col; ++j)         {             product.p[i][j] = 0;             for (int k = 0; k < mat1.row; ++k)             {                 product.p[i][j] += mat1.p[i][k] * mat2.p[k][j];             }         }     }      return product; } void delete_mat(Matrix *mat, int mat_number)  //？ {     for (int i = 0; i <= mat_number; ++i)     {         for (int j = 0; j < mat[i].row; ++j)         {             free(mat[i].p[j]);             mat[i].p[j] = NULL;         }         free(mat[i].p);         mat[i].p = NULL;     } }  注意看一下get_row_col()函数，里面返回值是否有问题。

user: user-0
content: 请问这个小程序问题出在哪里啊