【问题标题】:SIGSEGV; missing file; when running program using sscanfSIGSEGV;缺少文件;使用 sscanf 运行程序时
【发布时间】:2012-03-08 13:34:46
【问题描述】:

下面我将描述调用函数sscanf时遇到的错误。

我的一些代码:

#include <cstdio>
(..)
int device_num = 0;
int frameTime = sscanf(currentStringVector[2].c_str(), "%d", &device_num);

它是 OmNet++ 模块的一部分,所以我使用 OmNet++ 编译它。 我在 GDB 中收到以下错误消息:

"程序收到信号SIGSEGV,分段错误。 __rawmemchr_sse2 () 在 ../sysdeps/x86_64/multiarch/../rawmemchr.S:31 31 ../sysdeps/x86_64/multiarch/../rawmemchr.S:Filen eller katalogen finns inte. 在 ../sysdeps/x86_64/multiarch/../rawmemchr.S"

当我打电话给sscanf时,问题就开始出现了。

我在 64 位系统上的 Ubuntu 中运行该程序。 如何解决上述问题?

谢谢!

【问题讨论】:

  • 你能在调用 sscanf 之前打印出 'currentStringVector[2].c_str()' 吗?
  • 你能发布声明和填充currentStringVector的代码吗?
  • 一段自包含的代码(将在例如 ideone.com 上运行并表现出相同的行为)对于调试此问题最有用。
  • 向量currentStringVector有多大(即size的返回值)?

标签: c++ omnet++


【解决方案1】:

使用 OMNeT++,您可以在从命令行运行程序时使用像 gdb 这样的调试器。 IDE 还允许您调试代码。

我的猜测是currentStringVector[2].c_str() 无效。也许向量比那个小。

【讨论】:

  • 谢谢!是的,我在发布后注意到该向量在它所在的 for 循环中的一个实例中比该长度短。尽管错误状态令人困惑:“文件丢失”...
猜你喜欢
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
相关资源
最近更新 更多