【发布时间】:2012-12-15 16:53:57
【问题描述】:
我有这个代码:
int a;
printf("&a = %u\n",(unsigned)&a);
printf("a\n");
printf("b\n");
printf("c\n");
printf("d\n");
我试图打印a变量的指针。
但它在printf("a\n"); 行上失败并说Segmentation fault (core dumped)
输出:
&a = 134525024
Segmentation fault (core dumped)
当我从代码中删除行 printf("&a = %u\n",(unsigned)&a); 时,它成功了。
输出:
a
b
c
d
我的代码中有什么磨损?
【问题讨论】:
-
这是你的全部源代码吗?
-
你所展示的没有错。
-
使用
%p打印指针值,而不是%u。 -
@Rohan 它被转换为
unsigned,所以%u是正确的(尽管%p和void*的转换会提供更多信息)。 -
你
#include <stdio.h>了吗?您是否将-Wall添加到您的编译选项中(或者,当您这样做时会发生什么)?您最好还包括#include <inttypes.h>并使用printf("%a = 0x%.8" PRIXPTR "\n", (uintptr_t)&a);作为(在定义uintptr_t的所有系统上)保证结果不会截断任何数字(而转换为int、unsigned、@ 987654341@,unsigned long,甚至unsigned long long都不能保证这样做)。那是一个 C99 头文件,但它在 Linux 中是可以的。
标签: c ubuntu segmentation-fault printf