free()-char *在sscanf()之后停止工作?“

时间:2018-10-26 06:57:11

标签: c memory malloc free

我在一些内存问题上遇到了麻烦。问题是当释放行(free(line))时,会有一个

  

free():无效的尺寸错误。

据我所知,sscanf不会修改传递给它的字符串。奇怪的是,if语句中的free(line)可以正常工作。我不确定问题出在哪里,因为我已经在程序的其他部分像这样释放了char*,尽管没有sccanf调用,也没有问题。任何帮助将不胜感激。

char* line;
read_line(read, &line, 0);
printf("%s\n", line); //gives "playinfoA/30"
char playerLetter[1];
char numberOfPlayers[2];
char temp[1];
if (sscanf(line, "playinfo%1s%1s%s", playerLetter, temp, 
           numberOfPlayers) != 3) {
    free(line);
    return -1;
}
//free(line);
return 0;

1 个答案:

答案 0 :(得分:1)

如果问题出在 if 阻止失败,则free(line)不起作用,那么您可能想检查 line 是否实际上指向某物。 / p>

由于您没有初始化 line (这是指向char的指针),因此使其指向某个内存位置的唯一其他可能性是调用 read_line 。 / p>

现在,我不确定 read_line 的功能,但是尝试传递 line 而不是&line 吗?