【问题标题】:What is the difference between assigning a pointer to variable address and explicitly to memory address?将指针分配给变量地址和显式分配给内存地址有什么区别?
【发布时间】:2014-09-13 18:47:27
【问题描述】:

查看以下代码:

#include<iostream>
using namespace std;

int main()
{
    int a=10;
    int *p=&a;
    *(p+1)=6;
    cout<<*(p+1);
}

上面的代码不起作用。然而,下面这段分配给显式内存地址的代码确实有效:

#include<iostream>
using namespace std;

int main()
{

    int *p=(int *)0x28fefc;
    *(p+1)=6;
    cout<<*(p+1);

}

为什么其中一种方法有效,而另一种无效? 我在第二个中使用了我计算机的内存地址。这个地址可能在其他机器上不起作用。

【问题讨论】:

  • “不起作用”是什么意思?会发生什么?
  • 进程返回负值并立即终止

标签: c++ pointers


【解决方案1】:

这些都是未定义的行为。您正在尝试修改未分配的内存。第二个更不安全,因为您假设每次都会将a 分配给该地址,这绝对不是一个安全的假设。

【讨论】:

  • @user35538​​36 未定义的行为意味着一切皆有可能,但没有任何保证。因为在你的电脑上“工作”并不意味着它可以在其他地方工作。
  • 它不是“工作”,它是未定义的行为。这意味着该标准没有指定应该发生什么。编译器可能会让你这样做,它可能会抛出异常,它可能会使你的计算机崩溃,或者它可能什么也不做。
  • 谢谢我明白了!!!这意味着要使用任何内存,我必须先在变量声明等的帮助下分配它?
猜你喜欢
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
相关资源
最近更新 更多