【发布时间】:2018-06-26 21:35:37
【问题描述】:
我正在做一个简单的代码来打开一个带有矩阵的文件,但我遇到了一个奇怪的错误。这是我的代码:
char** CM;
char** ACM;
int lines, columns;
int i, j;
//read file
FILE* file = fopen("matrix.txt", "r");
fscanf(file, "%i %i", &lines, &columns);
CM = (char**)malloc(sizeof(char)*lines);
ACM = (char**)malloc(sizeof(char)*lines);
for(i=0; i<lines; i++)
{
CM[i] = (char*)malloc(sizeof(char)*columns+1);
ACM[i] = (char*)malloc(sizeof(char)*columns);
fscanf(file, "%s", CM[i]);
CM[i] = (char*)realloc(CM[i], sizeof(char)*columns);//don't need \n
printf("%s\n", CM[i]);
}
printf("\n");
for(i=0; i<lines; i++)
{
printf("%s\n", CM[i]);
}
但是输出结果却不是我所期望的:
00000
01010
01010
01100
00000
��6
01010
01010
01100
00000
如果我评论ACM[i] = (char*)malloc(sizeof(char)*columns);,它可以正常工作。我什至使用 GDB 来查看发生了什么,我得到了这个:
23 ACM[i] = (char*)malloc(sizeof(char)*columns);
2: CM[0][0] = 48 '0'
3: CM[1][1] = 49 '1'
4: i = 4
(gdb)
24 fscanf(file, "%s", CM[i]);
2: CM[0][0] = -80 '\260'
3: CM[1][1] = 49 '1'
4: i = 4
请问,有人能告诉我我的代码发生了什么吗?
【问题讨论】:
-
您使用的是 C 还是 C++?如果是后者,您不应该使用
malloc。 -
又一个可以通过在 malloc 中不使用
sizeof(type)来修复的错误 -
这个问题肯定有几十个重复。有链接@M.M?
-
我正在编写一个简单的代码 -- 如果你使用
std::string和/或std::vector而不是原始指针,会简单得多。 -
@PaulMcKenzie 但是否是
c++尚无定论。不幸的是,代码中没有指标。