問題タブ [dynamic-memory-allocation]

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.

0 投票する
4 に答える
2168 参照

c++ - 静的に次元付けされた配列の C++ 動的に割り当てられた配列

可変数の「char[2]」、つまり 2 文字の静的配列を保持する構造を作成する必要があります。

私の質問は、x 個の char[2] にメモリを割り当てる方法です。

私はこれを試しました(int xが定義されていると仮定します):

(うまくいきませんでした)

std::vector<char[2]> をコンテナーとして使用できることはわかっていますが、生のポインターでどのように行われるかについて興味があります。

私は C++ が初めてで、学習しようとしています。

0 投票する
4 に答える
225 参照

c++ - 動的に割り当てられた配列はC++でどのように解放されますか?

私はあなたがこのようにしなければならないことを知っています:

ここで私の質問は次のとおりです。明示的に述べられていないため、正しい量のメモリが解放される可能性はありますか? OS は、割り当てられたメモリとその開始アドレスを追跡しますか?

0 投票する
10 に答える
30968 参照

c - Cで実行時に配列のサイズを定義できますか

Cが初めてです、助けてくれてありがとう。

サイズを指定したり初期化したりせずに、Cで配列を定義することは可能ですか?

たとえば、数値を入力して int 配列に格納するようにユーザーに促すことはできますか? 事前に何桁入るかわかりません。

私が今考えることができる唯一の方法は、理想的な解決策ではない最大サイズを定義することです...

0 投票する
4 に答える
2138 参照

c++ - VC++ の動的配列サイズと動的配列アロケーター

Visual C ++が動的配列にメモリを割り当てる方法を明確にするために、独自の小さな発見プログラムを作成しているときに、少し混乱しています。注意しなければならないのは、C++ 実装の new[]/delete[] 演算子に関するこの質問を説明している技術文書に出会ったことがないことです。

最初は、new[] と delete[] は、単純な C として解釈される場合、次のようなものだと思いました。

このコードは、動的配列の次の構造を意味します。

私の VC++ コンパイラは、次の出力を生成するプログラムを生成しました。

明らかに、この場合はすべて問題ありません。しかし、「ネイティブ」な VC++ 動的配列アロケーターの性質を発見しようとしたとき、私は間違っていることを理解しました (少なくとも VC++ については)。そこでいくつか質問があります。動的配列サイズの値はどこに格納されますか? 動的配列アロケーターはどのように機能しますか? 動的配列に使用するバイト単位の構造はどれですか? または...または、これを明確にするリンクを提供していただけますか(VC ++が最も優先されます)。

0 投票する
3 に答える
1370 参照

c++ - スタック割り当てオブジェクトを使用して異種オブジェクトをベクターに格納する

スタック割り当てオブジェクトを使用してオブジェクトを異種ベクトルに格納する

こんにちは、

CA1、CA2、およびおそらくその他に派生した抽象クラス CA があるとします。

これらの派生型のオブジェクトを、クラス CB に埋め込んだベクトルに入れたいと考えています。ポリモーフィズムを正しく行うには、ポインターのベクトルを格納する必要があります。

ここで、次の主な機能があるとします。

元のオブジェクトが破棄されたときに格納されたオブジェクトが存続するように、メソッドを簡単な方法で記述するにはどうすればよいですかvoid CB::Store(const CA&)(上記の単純な例では発生しません)。

私の問題は、オブジェクトのアドレスをベクターにコピーする前に、まずオブジェクトをヒープにコピーする必要があることですが、派生型のオブジェクトを作成するにはどうすればよいですか? 確かに、RTTI を使用して、考えられるすべての型を検索し、ポインターを作成して割り当て、割り当てられた空間に (適切なキャストを使用して) オブジェクトをコピーしてから、ベクターにプッシュすることができます。しかし、これは非常に複雑に思えますね。

もっと簡単な方法はありますか?

(そして、メインで動的割り当てを使用せずに!)

0 投票する
3 に答える
8316 参照

c++ - サイズが不明なデータをC++に保存する

私はPHPを約4年間使用していますが、パフォーマンスがわずかに(:P)向上する必要がある問題に遭遇したため、C++を選択しました。

私が書いているプログラムは、MySQLデータベースをスキャンしてロードするURLを探し、cURLを使用してロードし、指定された文字列を検索して、それに応じてデータベースを更新するLinuxデーモンです。私が直面している問題は、特定の文字列を検索するために変数に格納する必要のあるデータのサイズがわからないことです。

リンクリストを使用して、データがリストを埋めるときにさらにノードを割り当てることを考えました。これは物事を行うための良い方法ですか?

前もって感謝します、

0 投票する
2 に答える
190 参照

qt - ポインタは割り当てられたアドレスで返されません

Qt Creator4.5GCC4.3を使用していますが、 QtまたはC ++に関連するかどうかわからないという次の問題がありchar *ます。入力パラメーターとして、を使用して関数を呼び出します。その関数内で動的割り当てを行い、アドレスをに割り当てますchar *。問題は、関数が戻るときに、このアドレスをポイントしなくなったことです。

ポインタを返すと、で割り当てられたものとは完全に異なるアドレスが含まれていますputDatagrams()。なんで?
..。

OK thx私は私の間違いを理解しています(ルーキーの間違い:()。関数への入力パラメーターとしてポインターを送信するときは、データのアドレスを送信しますが、ポインターのアドレスは送信しないため、ポインターを別の場所にポイントすることはできません...これは実際にはIndexのようなローカルコピーです。char*を使用してデータが正常に返される唯一のケースは、関数呼び出しの前にメモリを割り当てることです。

0 投票する
4 に答える
41615 参照

c - 2D および 3D 配列の動的割り当て/割り当て解除

2D 配列を動的に割り当て/割り当て解除するア​​ルゴリズムについては知っていますが、3D 配列についても同じことはよくわかりません。
この知識と少しの対称性を使用して、次のコードを思い付きました。
(コーディング中に 3D で視覚化するのに苦労しました)。

正しさについてコメントし、より良い代替案 (効率的または直感的に) を提案してください。
また、arr2D[2][3] や arr3D[2][3][2] などの静的配列と同様に、これらの 2D 配列と 3D 配列の両方に正常にアクセスできると思います
。右?

2D のコード

3D のコード

0 投票する
3 に答える
628 参照

c++ - new[] なしで Derived の配列を割り当てる: Base vtable へのポインタが悪い

基本的に、純粋な仮想クラス Base と、Base を継承する具象クラス Derived があります。次に、メモリの一部を割り当て、単純なキャストを介して Derived の配列として扱います。次に、= を使用して配列にデータを入力します。最後に、配列をループして、Base で宣言され、Derived で定義されている仮想メソッド GetIndex を呼び出そうとします。

問題は、Base の vtable へのポインターを読み取ろうとしてアクセス違反の例外が発生することです (Visual Studio のデバッグでは、これは __vfptr として表示され、常に 0xbaadf00d です)。

以下は、私が遭遇している問題の簡単な例です。

この動作は、HeapAlloc または malloc を介してメモリを割り当てる場合にのみ発生します。new[] を使用すると、正常に動作します。(また、cstor は前に 4 回呼び出されているため、出力は 4 5 6 7 です。)

0 投票する
1 に答える
991 参照

c - Cで動的に割り当てられた2D二重配列を参照渡し

文字列をdoubleの動的配列に変換しようとしています。文字列の各スペースは、各「;」の列を表します。新しい行を表します。このコードを実行すると、* F[0][col]の場合にのみ機能します。* F [1] [col]に到達すると、「CCode.exeの0x00e4483cで未処理の例外:0xC0000005:アクセス違反の読み取り場所0xcccccccc」というエラーが表示されます。誰もが理由を知っていますか?