スタックとヒープの違いを知りました。私のためにヒープ上にメモリを動的に割り当てる関数を作成した後、私はポインタを返し、各ポインタのアドレスと値を表示します(関数の内外に)。変数がヒープ上に作成され、同じ変数を指す2つのポインタが異なるアドレスを持っていますか?
値は同じですが、期待したとおりですが、ヒープ上の同じメモリチャンクのアドレスは異なりますが、これは私が期待していなかったものです。
なぜですか? pHeap2とpTempが同じアドレスを指してはいけませんか?
#include <iostream>
using namespace std;
int* intOnHeap(); // returns an int on the heap
int main()
{
int* pHeap = new int; // new operator allocates memory on the heap and returns its address
// 'new int' allocates enough memory on heap for one int and returns the address on the heap for that chunk of memory
// 'int* pHeap' is a local pointer which points to the newly allocated chunk of memory
*pHeap = 10;
cout << "*pHeap: " << *pHeap << "\n\n";
int* pHeap2 = intOnHeap();
cout << "pHeap2:\n-----------" << endl;
cout << "Address:\t" << &pHeap2 << "\n";
cout << "Value:\t\t" << *pHeap2 << "\n\n";
cout << "Freeing memory pointed to by pHeap.\n\n";
delete pHeap;
cout << "Freeing memory pointed to by pHeap2.\n\n";
delete pHeap2;
// get rid of dangling pointers
pHeap = 0;
pHeap2 = 0;
system("pause");
return 0;
}
int* intOnHeap()
{
int* pTemp = new int(20);
cout << "pTemp:\n-----------" << endl;
cout << "Address:\t" << &pTemp << "\n";
cout << "Value:\t\t" << *pTemp << "\n\n";
return pTemp;
}
出力:
*pHeap: 10
pTemp:
-----------
Address: 0042FBB0
Value: 20
pHeap2:
-----------
Address: 0042FCB4
Value: 20
Freeing memory pointed to by pHeap.
Freeing memory pointed to by pHeap2.
Press any key to continue . . .
と記載されている。素敵な写真。 +1 – Lee
おい、そんなにありがとう。私は&varがその変数のアドレスを与えることを知っていたと思うが、ポインタは自分のアドレスを持つことを忘れていて、別のアドレスを指している。コードを変更して追加しました。 cout << "次へのポインティング:\ t" << pHeap2 << endl; cout << "ポインティング先:\ t" << pTemp << endl; それぞれの分野で、今私は何を探していたのですか?それが指しているアドレスを取得するには、参照演算子を使用しないでください。その変数のアドレスになります:) Thanks Jason !! – shadowprotocol
@shadowprotocol:そうです、 '&pTemp'と'&pHeap2'はポインタのポインタであり、それらはピクチャの左右のボックスの上のアドレスです。 – jason