[英]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;
}
到目前為止我發現的兩個錯誤是
包括<iostream>
以解決cout
和endl
錯誤。 通常 C++ 編譯器需要知道這些函數來自哪里。
#include <iostream>
使用std::cout
和std::endl
而不僅僅是cout
和endl
。
ptr
和temp
指針中缺少new
運算符
ptr = new int;
temp = new int;
請注意,當您為ptr
和temp
動態分配 memory 時,請確保通過delete ptr
將其刪除,並在使用后delete temp
。
其他答案已經指出了問題,他們的解釋和可能的解決方案,除了這個問題:
- 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.