-1

@团队,

在尝试通过 printf 打印整数值时,我不小心将语句写为

int x =10;
printf(x);

在 linux 中,我在尝试执行它时遇到了分段错误。虽然它是错误的,但有人可以帮我知道它的原因。

Strace 说:

mprotect(0x7f872fb26000, 4096, PROT_READ) = 0
munmap(0x7f872fb0b000, 99154)           = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV (core dumped) +++

尝试在 SO 中搜索但没有成功。

4

3 回答 3

4

for的第一个参数printf()是格式字符串,它是char *指针。因此,当您这样做时,printf(x)它会x尝试char *访问存储在 address 的字符串10。但它无效,所以它给出了分段错误。

于 2013-09-19T06:53:15.700 回答
3

您遇到分段错误,因为printf将您传递的 10 解释为 a char *,并尝试从机器地址 10 读取。在运行 Linux 的系统上,该地址无效并导致分段错误。

于 2013-09-19T06:53:08.310 回答
1

以正确的格式使用 printf()。printf("%d",x)。

于 2013-09-19T07:21:15.103 回答