簡體   English   中英

C++ 指針和 Memory 分配

[英]C++ Pointers and Memory Allocation

我在學校參加了 C++ class 並給出了幾行有錯誤的代碼,我無法找到所有 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

包括<iostream>以解決coutendl錯誤。 通常 C++ 編譯器需要知道這些函數來自哪里。

#include <iostream>

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

ptrtemp指針中缺少new運算符

ptr = new int;
temp = new int;

請注意,當您為ptrtemp動態分配 memory 時,請確保通過delete ptr將其刪除,並在使用后delete temp

其他答案已經指出了問題,他們的解釋和可能的解決方案,除了這個問題:

  1. temp = x 需要是一個指針,*temp = x

不,你在這里錯了。 指針temp未初始化,取消引用未初始化的指針 ( *temp ) 將導致未定義的行為 兩種方法可以解決它:

首先,將memory分配給temp

temp = new int;

然后你可以這樣做

*temp = x;

在這種情況下,分配給temp的 memory 將具有x值的獨立副本。 x值的任何更改都不會反映在temp指針指向的 memory 的內容中,反之亦然。 確保釋放分配給temp的存儲,一旦你完成它,因為它指向的 memory 是動態分配的。

其次,將x的地址分配給temp指針

temp = &x;

temp指針指向x x的值進行任何更改, *temp將給出x的當前值,反之亦然。 不需要取消分配temp文件,因為它指向的 memory 不是動態分配的。

對於更少的代碼行,我更喜歡全局使用命名空間 std,這將解決每次使用 std::cout 的問題

using namespace std;

除此之外,您必須在聲明指針后將 memory 分配給指針,這可以通過使用 new 運算符來完成(不要忘記在使用 delete 運算符完成工作后釋放 memory),而不是ptr = int; 利用

ptr = new int;

也使用temp = x; 是錯誤的,因為您使用temp = &x; 應該是正確的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM