【问题标题】:c unknown Segmentation fault (core dumped)c 未知分段错误(核心转储)
【发布时间】:2015-11-11 16:26:20
【问题描述】:

我遇到了分段错误,但我不知道为什么:

    // Assemble folderPositionString
    char *folderPositionString = "folders-";
    strcat (folderPositionString, "files"); 

理论上,这应该产生一个以“文件夹文件”为值的单个字符字符串。我以前使用过 strcat 并且它可以工作,但由于某种原因,它在这里不开心。

如果我注释掉 strcat 行,一切都会编译并正常工作。

感谢 Eugene 的工作代码

    char folderPositionString [50] = "folders.";
    strcat (folderPositionString, folderPositionRaw);   
    strcat (folderPositionString, ".files");

【问题讨论】:

标签: c gcc segmentation-fault


【解决方案1】:

folderPositionString 指向分配字符串文字的只读内存。尝试在那里写入其他数据时,您会遇到内存访问冲突。

关于更新的更新:

在第二种情况下,query_string 获得与account_id 相同的地址值,这可能指向非只读内存区域。

【讨论】:

  • Eugene - 在第二部分,我想我没有使用“值”或 account_id,而是指向它的实际内存位置?我猜我应该重新审视该代码,因为这也可能对该代码产生意想不到的后果。
  • 对于第一部分 - 使用 [] 设置 folderPositionString 会更好还是我需要以不同的方式分配内存?
  • 它是account_id 的值,它被解释为地址(我希望它是有效的)。如果您将folderPositionString 更改为[],是的,它的行为会有所不同,只需使用此字符串初始化可写数组。但不要忘记将它的大小设置为足够的数字以包含连接的字符串。
  • 谢谢尤金,解决了它。我已经用最终的代码更新了我的问题。再次感谢:)
  • 请还原原来的问题。这是一个问答网站,这意味着它必须包含有效的问题和答案。
猜你喜欢
  • 2021-03-04
  • 2022-01-14
  • 2017-02-25
  • 2016-07-12
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多