【问题标题】:free()-ing a char* stops working after sscanf()"?free()-ing 一个 char* 在 sscanf() 之后停止工作”?
【发布时间】:2018-10-26 06:57:11
【问题描述】:

我遇到了一些内存问题。问题是当线路被释放时(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;

【问题讨论】:

  • "%1s" 需要一个长度为 2 的数组,例如char temp[2];
  • 与@user3386109的评论有关,numberOfPlayers[2]不够大,无法容纳"30"

标签: c memory malloc free


【解决方案1】:

如果您的问题是,当 if 块失败时 free(line) 不起作用,那么您可能需要检查 line 是否真的指向某个东西。

由于您没有初始化 line,它是一个指向 char 的指针,让它指向某个内存位置的唯一其他可能性是调用 read_line

现在,我不确定 read_line 是做什么的,但请尝试传递 line 而不是 &line

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多