【发布时间】:2017-10-26 20:24:33
【问题描述】:
我正在尝试重现 std libc funcs 的行为。 阳性病例 - 好的。 负面案例 - 好的。 但... 我所有的负面案例都给了我“seg fault”而不是“bus err”/“abort”。
例子:
void func()
{
...
char str[3] = "nvm";
char str2[3] = "nbd";
my_strcat(str, str2);
...
}
robot$> 分段错误./ex
void func()
{
...
char str[3] = "nvm";
char str2[3] = "nbd";
strcat(str, str2);
...
}
机器人 $> 中止 ./ex
那么“段错误”和“中止”有什么区别?我怎样才能“中止”我的代码?
【问题讨论】:
-
查找重复项:修改字符串文字。更糟糕的是,没有足够的内存来允许
strcat。两个特定错误 - 它们不应该是指针数组,而是char数组,并且 [size] 限制阻止编译器自动添加'\0'字符串终止符,因此任何字符串处理函数都会失败。 -
您更改了代码。请发布 实际 代码,不要更改它以使 cmets 或答案无关紧要。请阅读Minimal, Complete, and Verifiable example - 这不是一个动态代码模组网站。
-
我的错,字符数组。但我无论如何都在谈论崩溃行为。为什么 libc func 给我“中止”而 libmy func 给我“seg fault”?
-
您正在调用未定义的行为。如果 C 提供了一种控制或预测结果的方法,那么将改为定义行为。
标签: c crash crash-reports abort