【发布时间】:2019-07-27 07:35:36
【问题描述】:
#include <stdio.h>
#define null1 ((void*)0)
#define val ((int)2)
int main() {
int *p;
p = null1;
printf("%p", &p);
//p = (int *)val;
*p = val;
//printf("\n%p", (int*)p);
return 0;
}
输出:
Segmentation fault(core dumped)
我想给指针赋值宏。
【问题讨论】:
-
p被初始化为一个空指针(被你对宏的使用稍微伪装了)。评估*p具有未定义的行为。语句*p = val都评估*p以获得地址,并将该地址分配给2的值,这会覆盖程序不应访问的内存。主机系统检测到这一点,并向您的程序发送一个信号,这会导致程序终止并显示有关分段错误的消息。一种可能的解决方法 - 创建一个int并分配p的地址,例如int i; p = &i;在第一个printf()之前 -
不清楚你不想做什么。你是想让
p指向某个保存值2的地方,还是要强制p保存一个整数,而不是一个指针? -
@eddyctid:您可以通过点击分数下方的灰色复选标记来接受其中一个答案。
标签: c pointers segmentation-fault null-pointer