![]() |
1
9
您发布的代码是完全合法的,不应该导致segfault-不需要malloc任何东西。您的问题必须在其他地方-请张贴导致问题的最小代码示例。 编辑: 现在,您已经编辑了代码,使其具有完全不同的含义。不过,“hello world”没有显示的原因是输出缓冲区没有刷新。试试Addiig
打印后。 关于定位问题的根源,您有两个选择:
|
![]() |
2
5
正如尼尔和其他人所说,所写的代码是好的。也就是说,在开始修改缓冲区之前,
|
![]() |
3
3
“如中所述,一种简单/直观的方法来查找有问题的代码行?” 使用gdb(或任何其他调试器)。
要查找程序SEG的错误位置,请用编译它
然后你可以用
例子:
|
![]() |
4
2
默认情况下,输出被缓冲,segfault在输出实际写入stdout之前发生。尝试:
(默认情况下,stderr未缓冲。) |
![]() |
5
1
这个代码不应该是segfault。您只是将一个指向文本字符串的指针赋给一个指针变量。如果你使用
消息不出现可能是由于缓冲的I/O。请打印换行符
|
![]() |
6
0
你有两个问题。第一个问题是您的(原始)代码不会出错。将字符串常量赋给char指针是完全有效的。但我们暂时把它放在一边,假装你在那里放了什么东西 将 节错。 然后通常是缓冲区的问题,一个在C运行时库中,另一个在操作系统本身中。你需要冲洗它们。
最简单的方法是(在UNIX中,不完全确定
我经常在Unix中这样做,它确保C运行库被刷新到Unix中。(
|
![]() |
7
0
很可能“hello world”正在某个地方被系统缓冲,并没有立即打印到屏幕上。它存储在等待任何进程/线程/负责屏幕编写的任何对象都有机会处理它。当它等待(也可能缓冲其他数据输出)时,您的函数就完成了。它来自非法访问和segfaults。 |