【发布时间】:2012-03-25 06:42:42
【问题描述】:
我的代码中有一个像这样的错误。
char desc[25];
char name[20];
char address[20];
sprintf (desc, "%s %s", name, address);
理想情况下,这应该给出一个段错误。但是,我看到这给出了总线错误。 维基百科说“总线错误”的顺序是程序尝试访问未对齐的内存位置,或者当您尝试访问不存在或不允许的物理(非虚拟)内存位置时。 '
上述语句的第二部分听起来类似于段错误。所以我的问题是,你什么时候得到 SIGBUS,什么时候得到 SIGSEGV?
编辑:- 很多人都提到了上下文。我不确定需要什么上下文,但这是位于从许多其他类函数调用的静态类函数中的缓冲区溢出。如果有更具体的东西我可以提供帮助,请询问。
无论如何,有人评论说我应该编写更好的代码。我想问这个问题的目的是“应用程序开发人员可以从 SIGBUS 与 SIGSEGV 中推断出任何东西吗?” (摘自下面的博文)
【问题讨论】:
-
澄清一下,这家伙正在寻找 SIGBUS 和 SIGSEGV 之间的区别,而不是发布代码生成其中一个或另一个的原因。
-
@Pochi,我认为 cnicutar 的回答仍然适用。一旦您遇到未定义或非法行为,几乎任何事情都可能发生。这取决于操作系统/硬件。我们甚至不知道错误是否发生在
sprintf行上,也许它只是破坏了内存,而其他东西会产生实际的错误。 -
@Pochi 嗯,我希望能得到这两个问题的答案。
-
无法得知所提供的上下文信息。
标签: c++ gcc segmentation-fault