問題タブ [double-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++ を初めて使用し、ダブル ポインターを使用して多次元配列のコードを記述しようとしています。これは私のコードです:
クラス宣言:
関数定義:
主な機能:
関数では機能しinit
ますが、set
関数で値をチェックしようとすると、データ関数の最初のif
ステートメントで壊れます。set
c - ポインタへの単純なポインタ
私はこれが機能する理由を知っています:
私が理解していないのは、なぜこれが機能しないのかということです(私のマシンでは、印刷さ3700
れるか、そのようなものです)。
なぜ両方が同等ではないのですか?
c - pthread_exit() を使用して戻り値にアクセスする
次のコードを実行しました。
Line2 でセグメンテーション違反が発生します。Line2 の何が問題なのか
Line2 を
printf("ret = %d\n", (int)ret);
セグメンテーション違反はなく、正しい値 (つまり、100) が出力されます。変更が機能する理由がわかりません。ダブルポインターの使用に関して、私は間違った概念を持っていると思います。直してもらいたいです。
セグメンテーション違反の理由と、修正が機能する理由は何ですか?
c++ - ダブル ポインターとして参照される C++ LinkedList 構造体であり、次のノードにアクセスする必要がある
さて、リンクリスト構造体を次のように設定しました。
挿入機能とともに:
head の次の要素にアクセスするにはどうすればよいですか? 現在配置されているコードでは、次のエラー メッセージが表示されます。
c++ - C++で2次元配列を乱数で埋める
ランダムな整数の2次元配列を挿入し、それを表示するための最大値とその配列内の座標を見つけるプログラムを作成しています。私は3つのファイルを使用しています。utils.h、utils.cpp、およびmain.cpp。私のプログラムは配列を表示しますが、それは正しくなく、すべての研究にもかかわらず、その理由を理解することはできません。どんな助けでもいただければ幸いです。これは大学の課題であり、私の教授はmainとutils.hをそのままにしておくことを望んでいるので、変更できるのはutils.cppだけです。お時間をいただきありがとうございます。
これは私が得ている私の出力です。
c++ - 奇妙なエラー、エラー:'constchar*'から'char'への無効な変換[-fpermissive]
これをコンパイルしようとするたびに(110行目のエラー)
このエラーが発生します110:17:エラー:'const char*'から'char'への無効な変換[-fpermissive]2D配列(4行目)をconst charにしないようにしたいのですが、ヘルプ!-Lijrobert
c - ダブルポインタを介した配列アクセス、本体を失う、純粋なC
ダブルポインタを介して参照した配列コンテンツを並べ替えようとしているとき。
77行目
コンテンツはソートされていません。同じメソッドを使用して、この配列の値を関数ArrayPrint()で非常に細かく出力しています。
このコードはMSC++コンパイラでうまくコンパイルされますが、GCCについてはわかりません。コードやエラーに警告はありません。MSコンパイラは標準構成では警告を表示しません。
c - malloc と strdup を使用した構造体へのポインターへのポインター
私の主な意図は、メモリを割り当ててそのすべての値を埋める構造体、関数へのポインタを渡すことです。戻った後、画面に印刷します。
構造はこんな感じ。
この構造体の宣言は変更できないことに注意してください。私の主な機能は、このように非常に単純です。
}
fillArray 関数は、構造体に n + 1 メモリ ブロックを割り当てると想定しています。ここで、n は、存在するロックの実際の数です。一方、最後の (n+1) 番目のブロックはゼロで埋められます。そのため、メインから印刷しているときに、割り当てた構造体の長さを気にする必要なく、この状態を確認できます。
私の問題はfillArray関数にあります。
実はこのLINE100が問題を起こしています。実際には、すでに埋められている構造体のエントリを置き換えます。つまり、この行は dlock[0]->name を 0 で埋めます。一方、dlock[1] は変更されません。
私のgdbログはこのようなものを示しています.
これらはすべて、割り当てと値の入力後に取得されるログです。
メモ 1 とメモ 2 から、strdup が malloc によって既に割り当てられているメモリ位置を返したこと、つまり、strdup への最初の呼び出しが dlock[2] のアドレスを返したことは明らかです。どうしてこうなった。このため、 (*dlock+2)->name = 0 により dlock[0]->name が 0 で埋められました。
この問題を簡単に説明すると、Malloc は 3 つのアドレスを返してきました。簡単に理解できるように、{1000,1008,1010} としましょう。{1010,1018} を返す strdup を 2 回呼び出しました。
この 1010 と 1018 は、それぞれ char *name of lock[0] と lock[1] に格納されます。
誰かが私に教えてくれますか、私はこのコードで何か間違ったことをしていますか、それとも strdup の問題ですか (既に割り当てられたメモリブロックを割り当てています)
注: char *name を char name[20] に変更し、strdup の代わりに strcpy を使用すると、完全に機能しました。
c - ポインタをポインタから解放します
何かのためにバッファを取り込む関数があり、関数のスコープ内のバッファにメモリを割り当てる必要があるとしましょう。次のようになります。
さて、この関数の後半には、falseと評価される別の条件ステートメントがあります。if/条件ステートメントでfalseが返された場合buf
は、関数自体でこれ以上何もできないため、ポインターからポインターを解放する必要があります。 。
したがって、これには2つのアプローチがあり、拡張性、再利用などの観点から、どちらが「より安全」でより実用的であると見なされるかを知りたいと思います。
アプローチA)
アプローチB)
アプローチA)が推奨される方法であると何かが教えてくれますが、私は興味があり、何かを見落としたかどうかを確認したいと思います。
また、プログラマーがポインターからポインターを解放する必要がある場合、それを渡すだけで処理できるのと同じくらい簡単free(p)
ですか?または、同じタイプの単一のポインターにキャストする必要がありますか?
非常に多くの質問...
c - 2D配列で実験中のダブルポインター
ダブルポインターを使用して 2D 配列を実装しようとしています。私が実装しようとしている方法は、物理的な表現に従って視覚化することです。たとえば、2 x 2 行列を考えてみます。その物理表現は次のとおりです。
R1 -> A00 A01
R2 -> A10 A11
ステップ 1: 最初の行を指す double ポインターを作成する
ステップ 2: c1 のアドレスを指す第 1 レベル ポインターを作成する
ステップ 3: ユーザーからの入力
ステップ
4: c2 のアドレスを指す第 1 レベル ポインターを作成する
5: ユーザーからの入力
ステップ 6: 行ポインターをポイント R2 にインクリメントする
ステップ 7: ステップ 2 から 5 を繰り返す
以下は、私が実装したコードのコード スニペットです。
scanf は正常に動作しているようです。しかし、printf では不規則な結果が得られます。他の場所を指し始めます
前に言った方法でこの 2D 配列を実装する方法を教えてください。この演習は、ダブル ポインターの動作に関する詳細な知識を得るために、実験的な目的で行っています。