指针和0xDEADBEEF,为什么这段代码不起作用?

时间:2013-04-01 02:53:23

标签: c++ pointers

我正在尝试分析C ++程序中的一些代码(我是C ++的新手),我不知道下面的代码试图完成的内容。
基于我在这里读到的线程,设置指向deadbeef的指针将使指针为null。但是,visual studio不允许我这样做并给我一个错误。我不知道第二个指针应该做什么。任何输入将不胜感激。

long* firstpointer = (long *)((void *)0);
char* secondpointer = (char*) ((void *)0);

*firstpointer = 0xDEADBEEF;
strcpy(secondpointer,"Here is some text, here is some more");

1 个答案:

答案 0 :(得分:3)

  

根据我在这里读到的线程,设置指向deadbeef的指针会使指针为null。

不,那是不正确的。虽然deadbeef是一种常见的“无意义模式”,但肯定等于null。将指针(更一般地说,存储区域)设置为已知且不常见的模式(例如deadbeef)的常见原因是检测未初始化的存储区域。通常用于表示null指针的所有零的模式不是一个好的候选者,因为在连续的内存位置中找到零序列的几率远远高于查找{{1 }}第

您在deadbeef调用中看到的崩溃是因为strcpy设置为无效值。您需要分配足够的内存以适应secondpointer及其终止零,以使"Here is some text, here is some more"不会出现未定义的行为。