問題タブ [pointer-to-pointer]
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の構造体へのポインタへのポインタを操作する方法は?
ダブルポインタの下の構造体のメンバーを変更したい。どのようにするか知っていますか?
サンプルコード
c - 連続するネストされたポインター (ポインターへのポインター) を 1 つの順序でいくつ持つことができますか? 参照の制限はありますか?
次のプログラムは、ポインターを宣言してから、前のポインター変数のアドレスを保持する新しいポインターを宣言します。ネストされたポインター変数を使用してメモリアドレスを保持するには、どのくらいの制限がありますか?
c - Cのポインタへのポインタ
Cのポインタについて助けが必要です。構造体が次のように作成した2つの構造体があります。
そして、私はこのような機能を持っています:
これはエラーを生成しています。例のように、bを指す構造rdが必要です。s2はリストのようにリンクされているため、ダブルポインターを格納する必要があります。したがって、リストの最初の要素を削除できるようにするには、**ポインターが必要です。コメントでrd->d=&bのように割り当てを行っていましたが、関数のフィールド "d"を参照しようとすると、無効なメモリが読み取られ、その理由がわかりません。
c - 多次元配列とポインターへのポインター
多次元配列を作成するときchar a[10][10]
、私の本によるとchar a[][10]
、配列を関数に渡すのと同様のパラメーターを使用する必要があると書かれています。
なぜ長さを指定しなければならないのですか?一緒にいるためにダブルポインターを渡しているだけではなく、そのダブルポインターは既に割り当てられたメモリを指していませんか? では、なぜパラメーターを にできないのchar **a
でしょうか? 2番目の10を指定して、新しいメモリを再割り当てしていますか?
c - メモリ解放中の奇妙な C エラー?
私はまだ遺伝的アルゴリズムを機能させようとしています(昨日、メモリ割り当てに問題があり、その結果、メモリを解放しようとするとひどいエラーが発生しました)が、今日はこのコードを持っています
free_generation()
関数呼び出しの前にその内容を確認していたところ、下の図のようなものでした。
(変数の最初の 4 つの値)
しかし、free_generation()
関数内では、以下に示すように、同じ変数がその値の一部を失います (具体的には、for ループ インデックスであるi
値 2 を取る場合)。i
(関数内の変数値)
以下に free_generation コードを投稿します。
の定義szChromosomes
は次のとおりです。
この値の損失は、一番上に投稿された while ループの 2 回目の繰り返しの後にのみ発生することを明確にする必要があります。つまり、最初の実行ではすべてが完全に機能しますが、この反復の後、2 回目は上記のように動作します。
編集:
ループ制御変数のインクリメントを含めるのを忘れていました (指摘してくれてありがとう! いいえ、グローバル xD ではありません)。クロスオーバーコードの一部を含めています:
arrays - 2D へのダブルポインタ
値の整数配列があり、この配列を指すダブル ポインターを作成したいと考えています。この 1D 整数配列は、実際には 2D 配列を表していると思います。たとえば、 がある場合、int A[2000*12]
12 行と 2000 行になります。問題は、配列 A を指すようにポインターを初期化する方法がわからないことです。私の最初の考えは次のようでした。
もちろん、これは正しくありません。より正確には、次のエラーが発生します:代入で互換性のないポインター型
c++ - C++ でポインターのアドレスがセグメンテーション違反をスローする
ダブルポインターを返すことになっている関数があります。この例では文字配列であるデータへのポインターのアドレスを返すことになっています
元のデータはコンストラクターのパラメーターとして送信されます
次に、frame_data と呼ばれる void* データ メンバにコピーされます。
ダブルポインターを返す関数は次のように定義されます。
最後に、後で data() を呼び出す関数
そして、これがプログラムのセグメンテーション違反です。明らかに何かが間違っていますが、問題がどこにあるのかわかりません。このプログラムでは、data() が二重ポインターを返すという事実と同様に、sprintf 行は変更できません。 ?