从void转换为int后无法访问指针的地址*

时间:2013-03-21 22:51:20

标签: c

void *ptr;
*(int*) ptr=12;

在此之后,我不明白为什么&ptr给我运行时错误。 虽然ptr*ptr当然运行良好。

2 个答案:

答案 0 :(得分:3)

void *ptr;

ptr指向哪里?我打赌,到了街上的咖啡馆。或者甚至可能是某种虫洞!

*(int*) ptr = 12;

所以你构建了一个void指针,指向谁知道什么指向int的指针,然后你取消引用它为它分配整数12.这将覆盖内存中的一些随机位置。如果你很幸运,程序不会崩溃。如果你运气不好,你的电脑就会爆炸。

所以,总结并重新解释你的问题,你问我们:“嗯,我正在取消引用一个我没有初始化的指针并指向who-know-where。为什么我的程序会崩溃?“我有这个权利吗?

答案 1 :(得分:2)

首先,你制作一个指向随机地址的指针

void *ptr;

然后,您尝试将值12存储到该随机地址,从而导致未定义的行为,因为您尚未为ptr分配任何内存