コンテキスト: 私はポインターについて頭を包み込もうとしています. 数週間前に学校でそれらを見たばかりで、今日練習中にばかげたものに出くわしました? 問題、それはあなたにとって非常に簡単かもしれませんが、私はプログラミング経験がほとんどありません.
SO でポインターの削除に関するかなりの数の質問を見てきましたが、それらはすべて「単純な」ポインター (または適切な用語が何であれ) ではなく、クラスの削除に関連しているようです。ここに私がしようとしているコードがあります走る:
#include <iostream>;
using namespace std;
int main() {
int myVar,
*myPointer;
myVar = 8;
myPointer = &myVar;
cout << "delete-ing pointers " << endl;
cout << "Memory address: " << myPointer << endl;
// Seems I can't *just* delete it, as it triggers an error
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// Error: a.out(14399) malloc: *** error for object 0x7fff61e537f4:
// pointer being freed was not allocated
// *** set a breakpoint in malloc_error_break to debug
// Abort trap: 6
// Using the new keyword befor deleting it works, but
// does it really frees up the space?
myPointer = new int;
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// myPointer continues to store a memory address.
// Using NULL before deleting it, seems to work.
myPointer = NULL;
delete myPointer;
cout << "myPointer: " << myPointer << endl;
// myPointer returns 0.
}
だから私の質問は:
- 最初のケースが機能しないのはなぜですか? ポインターを使用して削除する最も簡単な使用法と思われますか? エラーは、メモリが割り当てられていないことを示していますが、「cout」はアドレスを返しました。
- 2 番目の例では、エラーは発生していませんが、myPointer の値を計算してもメモリ アドレスが返されますか?
- #3は本当に機能しますか?私にはうまくいくようです.ポインタはもはやアドレスを保存していません.これはポインタを削除する適切な方法ですか?
長い質問で申し訳ありませんが、これをできるだけ明確にしたかったのですが、繰り返しますが、私はプログラミングの経験がほとんどないので、誰かが素人の言葉を使ってこれに答えることができれば、それは大歓迎です!