問題タブ [delete-operator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ 配列削除演算子の構文
私がした後、言う
Foo* array = new Foo[N];
私はいつもこの方法で削除しています
delete[] array;
しかし、時々私はそれをこのように見ました:
delete[N] array;
コンパイルして動作するように見えるので (少なくとも msvc2005 では)、私は疑問に思います: それを行う正しい方法は何ですか? では、なぜ逆にコンパイルされるのでしょうか?
c++ - C ++削除-オブジェクトを削除しますが、データにアクセスできますか?
クラスシングルブロックのインスタンスとして各ブロックを使用して、シンプルで機能するテトリスゲームを作成しました。
完全な行をスキャンし、ブロックのリンクリストを実行して、関連するブロックを削除し、->次のポインターを再割り当てする関数があります。
ゲームは動作し、ブロックは正しく削除され、すべてが想定どおりに機能します。ただし、検査すると、削除されたデータのランダムなビットにアクセスできます。
削除後に削除されたシングルブロックの「x」値をそれぞれprintfすると、ランダムなガベージを返すもの(削除を確認するもの)と222を返すものがあり、デストラクタが呼び出されても、データは実際には削除されていないことがわかります。ヒープ。多くの同一の試行は、適切に削除されないのは常に同じ特定のブロックであることを示しています。
結果:
予想外のデータにアクセスできるのでしょうか?
これが少し長蛇の列になっている場合は申し訳ありません。
c++ - totalviewでメモリリークとして表示されるdelete[]のMalloc呼び出し
私はHDF5を使用して、char*
によって割り当てられた文字列に文字列を読み込みますnew[]
。次に、string ::assign()呼び出しを使用して、このデータを実際に必要な場所にコピーします。delete[]
次に、そのchar*を呼び出します。これは、totalviewを使用したメモリリークの原因として表示されています。stdlibc ++で、、、、、およびの間にマングルされた呼び出しが表示delete[]
されます。何が起こっているのですか、これは本当にメモリリークですか?私もここに設定しました。replace_safe
mutate
create
malloc
GLIBCXX_FORCE_NEW=1
これは、状況を複製するサンプルコードです。valgrindはリークを示さず、呼び出しの前にブレークポイントを設定しない場合cout
、totalviewによってリークは検出されないことに注意してください。
c++ - 「delete this;」を使ってもいいですか?Thread クラスから継承するオブジェクトで?
一般に、あるクラスを継承するクラスがあり、そのクラスのインスタンスが実行終了後に自動的に割り当てを解除Thread
されるようにしたい場合、delete this
具体例:
私のアプリケーションには、 という1 つのメソッドを持つTimer
クラスがあります。ユーザーは次のように呼び出します。static
schedule
このschedule
メソッドはTask
オブジェクトを作成します (目的は Java TimerTask オブジェクトに似ています)。Task
クラスはクラスに対するprivate
ものであり、Timer
クラスから継承しますThread
(pthreads で実装されます)。したがって、schedule
メソッドはこれを行います:
コンストラクターはTask
、新しいスレッドで使用するために引数を保存します。新しいスレッドでは、タスクのrun
メソッドが次のように呼び出されます。
task
新しいスレッドが必要とするため、オブジェクトをスタック割り当てオブジェクトにすることはできないことに注意してください。また、他の人が使用できないようにTask
クラスprivate
をTimer
クラスにしました。
Task
オブジェクトを削除するということは、基になるオブジェクトを削除することを意味するため、特に心配していThread
ます。Thread
オブジェクトの唯一の状態はpthread_t
変数です。これが戻ってきて私を噛む方法はありますか?メソッドが終了pthread_t
した後は変数を使用しないことに注意してください。run
(メソッドへの引数またはコンストラクター内の何かdelete this
を介して) ある種の状態を導入することにより、呼び出しをバイパスすることができます。これは、メソッドを呼び出しているオブジェクトに対してフォークされるメソッドであることを示します。ただし、コードはそのまま動作するようです。Thread::start
Thread
delete
run
何かご意見は?
c++ - c++ に new と delete の別の構文があるのはなぜですか?
通常の関数呼び出しだけにできないのはなぜですか? 新しいのは基本的に次のとおりです。
削除中
では、なぜ new/delete は通常の関数ではなく独自の構文を持つことになるのでしょうか?
c++ - オーバーロードされたプール演算子の削除をどのように宣言して使用しますか?
C++-FAQ-lite のセクション 11.14を配列に適用する方法を知りたいです。
基本的に、私は次のようなものが欲しいです:
ただし、 this を宣言して呼び出すための正しい構文を理解できませんでしたoperator delete[] (pool)
。誰でもここで助けることができますか?
c++ - 組み込みのデータ型とユーザー定義のデータ型は、削除によってどのように区別されますか?
私がこれを行う場合:
では、C++ コンパイラはどのようにしてオブジェクト フォローイングdelete
が組み込みデータ型またはクラス オブジェクトであることを認識するのでしょうか?
私のもう1つの質問はnew
、の配列へのポインターでint
あり、その後、delete []
コンパイラーは割り当てを解除するメモリブロックのサイズをどのように知るのでしょうか?
c++ - std :: mapの削除(Visual C ++)
削除しようとしているマップへのポインタがあります(このマップにはnewが割り当てられています)。
このマップは有効だと思います。デバッグ中にカーソルを合わせると、次のように表示されpMap
ます[0]()
。
この空のマップを削除しようとすると、アプリが終了し、
myapp.exeの0xsomelocationでの初回例外:0xsomenumber:呼び出されたオブジェクトがクライアントから切断されました。
出力ウィンドウで。これは何を意味するのでしょうか?
ありがとう..
編集:ここにいくつかのサンプルコードがあります:
StructBにはオーバーロードされた演算子があります()
編集:StructBは確かに構造体です、申し訳ありませんが、演算子()は単なる文字列比較関数です。
私のコードのある部分では、クラスのコンストラクターがメソッドを呼び出します。それをInitClass()と呼びましょう。これにより、myMapポインターが次のように初期化されます。
後でこのクラスのデストラクタで、私は行きます
ありがとう
編集:動作していた古いバージョンのコードに戻しましたが、現在は正常に動作しています。
うまくいったのは次のようなものでした:
以前、私はそれをこれに変更しました:
奇妙な..コードに何か問題があるかもしれませんが、まだどこにあるのかわかりません..コード全体を投稿すると大きすぎる(そしておそらく解雇されるでしょう)ので、そのままにしておきましょうそれで..
問題の原因となったのは、クリアまたは削除しようとしたnullマップへのポインターであった可能性があります。
助けようとしたすべての人に感謝します...:)
c++ - ここで削除を正しく使用していますか?
C++クラスと動的配列の知識を組み合わせ始めたところです。「新しい演算子を使うときはいつでも」削除すべきだというアドバイスを受けました。デストラクタがどのように機能するかも知っているので、このコードは正しいと思います。
main.cpp
PicLib.cpp
PicLibに、Pic
より動的な配列を含むクラスを入力します。Pic
のデストラクタは、上記と同じ方法でそれらを削除します。私はそれdelete [] database
がそれらすべてのクラスを適切に取り除くと思います。
では、 main.cppでの削除は必要ですか?ここでハンキーなドーリーに見えるものはすべてありますか?
c++ - メモリエラーを削除
私は次のシナリオを持っています、
この関数は、まだ割り当てられていないときsetTest
に削除しようとするため、呼び出されるとエラーをスローします。_test
これは、_test
が0X0に設定されていないために発生しています。
誰かが私がこれを理解するのを手伝ってくれる?