【问题标题】:C++ Pointers and Memory AllocationC++ 指针和内存分配
【发布时间】:2021-11-29 21:02:49
【问题描述】:

我正在学校学习 C++ 课程,并且给出了几行有错误的代码,但我无法找到所有 4 个错误。该代码应该打印数字“302”我不擅长使用指针。 这是代码

int main () {
int* ptr;
int* temp;
int x;
ptr = int;
*ptr = 3;
cout << ptr << endl;
x=0;
temp = x;
cout<<*temp<< endl;
ptr = int;
*ptr = 2;
cout<<*ptr-*temp <<endl;
return 0;
}

目前我发现的两个错误是

  1. cout 和 endl 前面需要有 ::std
  2. temp = x 需要是指针,*temp = x

【问题讨论】:

  • ptr = int; 不会编译;作者可能打算ptr = new int;
  • 另外*temp = x; 将调用未定义的行为,除非temp 已经指向一个有效的int(在这个例子中它不是);也许你想要temp = &amp;x;

标签: c++ pointers


【解决方案1】:

包含&lt;iostream&gt; 以整理coutendl 错误。通常 C++ 编译器需要知道这些函数的来源。

#include <iostream>

使用std::coutstd::endl 而不仅仅是coutendl

new 运算符在 ptrtemp 指针中丢失

ptr = new int;
temp = new int;

注意,由于您正在为ptrtemp 动态分配内存,请确保在使用后通过delete ptrdelete temp 将其删除。

【讨论】:

【解决方案2】:

为了减少代码行,我更喜欢全局使用命名空间 std,这将解决每次使用 std::cout 的问题

using namespace std;

除此之外,您必须在声明指针后为指针分配内存,这可以通过使用 new 运算符来完成(不要忘记在您的工作完成后使用 delete 运算符释放内存),所以而不是ptr = int;使用

ptr = new int;

也使用temp = x; 是错误的,因为您将指针temp 的地址分配给变量值,使用temp = &amp;x; 应该是正确的方法

【讨论】:

    【解决方案3】:

    其他答案已经指出了问题,他们的解释和可能的解决方案,除了这个问题:

    1. temp = x 需要是指针,*temp = x

    不,你错了。指针 temp 未初始化,取消引用未初始化的指针 (*temp) 将导致 Undefined Behaviour。有两种方法可以解决:

    首先,分配内存给temp

    temp = new int;
    

    然后你就可以这样做了

    *temp = x;
    

    在这种情况下,分配给temp 的内存将具有x 值的独立副本。对x 的值进行任何更改都不会反映在temp 指针指向的内存内容中,反之亦然。确保释放分配给 temp 的存储空间,因为它指向的内存是动态分配的。

    第二,将x的地址赋值给temp指针

    temp = &x;
    

    temp 指针指向x。对x*temp 的值进行任何更改将给出x 的当前值,反之亦然。无需释放temp,因为它指向的内存不是动态分配的。

    【讨论】:

      猜你喜欢
      • 2016-02-21
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 2014-05-14
      • 1970-01-01
      相关资源
      最近更新 更多