【发布时间】:2015-10-05 09:38:47
【问题描述】:
我正在尝试使用 void 指针,但遇到了以下问题。当我编译以下代码时一切正常,但是当我在我的机器上运行它时,它不会给我结果而是出现提示 The program has stop working (https://drive.google.com/file/d/0B1mLcnk8kTFUeEtmYnlOaWJ6T3c/view?usp=sharing) ,我不知道后面发生了什么场景,关于取消引用void指针是否有任何问题。
如果我使用注释代码而不是原始代码,它将起作用。
#include<stdio.h>
int main()
{
void* ptr;
int dupe = 5;
*(int* )ptr = dupe; // ptr = &dupe;
printf("The value at ptr is %3d",*(int* )ptr);
}
我在 CodeBlocks 上使用 gcc。
【问题讨论】:
-
在第 6 行,您取消引用了一个无处指向的指针(它包含垃圾地址),并尝试将
dupe的值放在那里(即无处)。 -
请注意
*(int* )ptr = dupe;不是ptr = &dupe;。第二个赋值绝对有效,不会导致未定义的行为。 -
是否有可能在某些编译后,分配给它的垃圾地址是有效的?
-
"分配给它的垃圾地址" -- 它没有分配,它是堆栈上的任何垃圾。几乎可以肯定是 0,这是一个受保护的页面,因此您会遇到访问冲突。
-
如果你仍然有问题,
ptr = &dupe;就像在明信片上写下你朋友的地址,*(int *)ptr = dupe;就像在明信片上乱涂乱画,然后去你朋友家告诉他在您写在这张明信片上的地点与您见面
标签: c pointers void-pointers