【问题标题】:Seg Fault when attempting to append strings尝试附加字符串时出现段错误
【发布时间】:2013-10-08 23:16:24
【问题描述】:

我正在尝试将一个字符串附加到另一个字符串,但我遇到了段错误,似乎无法弄清楚我做错了什么。

typedef char * String;
String function(String str) {
    // Some variables here
    String current = "";
    String ch = "";

    //More code here
    while() {
        if() {
            current = malloc(strlen(current) + strlen(ch) + 1);
            strcat(current, ch);
        }
     ...
     }
}

即使strcat 行被注释掉,我仍然会遇到段错误,反之亦然malloc 行。这可能是我错过的痛苦显而易见的事情,但是有人可以解释如何正确地做到这一点,并解释我做错了什么吗?

【问题讨论】:

  • 当前在 malloc 后不是 nul 终止的。

标签: c


【解决方案1】:

currentmalloc 之后不是“\0”终止。
strcat 正在搜索此字符以了解在何处追加和执行此操作的段错误。

malloc返回后,您之前对current的初始化没有任何意义,它指向了完全不同的未初始化内存部分。
无法确定,但根据您提供的提示,我的提示是使用 realloc 扩展 current 的大小。

【讨论】:

    【解决方案2】:

    在您的 malloc 之后,您忘记用以前的 current 内容填充新分配的字符串 - 您不能这样做,因为您丢失了对它的引用(此外,您正在引入内存泄漏,因为您没有释放它。 改用realloc - 但首先将current 分配给malloc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-16
      • 2011-09-03
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      相关资源
      最近更新 更多