問題タブ [void-pointers]

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 投票する
5 に答える
7782 参照

c - (void *)型からの構造体の間接参照

voidポインターを使用してデータを渡し、それを(pData *)型にキャストしようとしています。私は何が間違っているのですか?gccは私に

gcc test.cエラー:構造体または共用体ではないものでのメンバー'filename'の要求

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

c - 別の構造を含む構造を pthread_create に渡す

そのため、ビットマップ情報を扱う別の構造体を含む、いくつかの変数を持つ構造体を渡そうとしています。ただし、構造内に含まれる情報へのポインターの逆参照に関して、「不完全な型へのポインターの逆参照」というエラーを吐き出すため、私のコードはどこかで失敗します。ここでこれに対処する多くの質問があることは知っていますが、そこに記載されていることを実装しようとしましたが失敗しました.

初期化に関する編集を含む main() からの関連コードは次のとおりです。

pthread_create の引数として渡される関数の関連コードは次のとおりです。

}

そして、ここに構造があります:

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

c++ - voidポインタの配列

繰り返しになりますが、この質問は「C ++で考える」第7章Q#7からも発信されています。StackヘッダーファイルをStack.hに変更する必要があると思います

Stack.cppでのStack::Stack(void * arr []、int size)の実装は、次のようになると思います。

ただし、メインのテストファイルStackTest.cppで、文字列配列のアドレスをこのコンストラクターに渡すにはどうすればよいですか?これが私が思いついたものです:

しかし、セグメンテーション違反があります。Stack :: Stack(void * arr []、int size)をStack :: Stack(string arr []、int size)に変更することも考えられますが、質問の要件を満たしていません。たとえば文字列を含むジェネリックオブジェクトを格納するためのStackの目的。void *ポインターとポインターの配列の概念、および文字列配列とvoid *配列の間の違いなどを理解するのはまだ難しいと思います...誰かがこの問題を解決するのを手伝ってくれるでしょうか?どうもありがとう!!

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

c++ - function-param で配列を取得する

次のように宣言された配列があります

と関数

このコードで関数を呼び出そうとしています:

XXX はどこにありますか?配列を取得するには何を渡す必要がありますか? ありがとうございました

編集1

編集2

0 投票する
5 に答える
889 参照

c++ - void* と void** のメンタル モデル?

注:私は経験豊富な C++ プログラマーなので、ポインターの基本は必要ありません。それは、私が一緒に仕事をしたことvoid**がなく、自分のメンタルモデルをvoid*vs. void**セマンティクスをより簡単に覚えられるように、誰かがこれを良い方法で説明してくれることを願っています。

次のコードを検討してください: (たとえば VC++ 2005 でコンパイル)

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

c++ - C++-voidポインタをキャストする

void*C ++は、そうでないものにをキャストしようとすると、ランタイム例外をスローしますか?

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

objective-c - AVAssetReaderを使用してAudioBufferListにどのように追加しますか?

後でAudioUnitコールバックを使用してAUGraphでオーディオを再生できるように、AVAssetReaderを使用してオーディオアセットの読み込みに取り組んでいます。AUGraphとAudioUnitのコールバックが機能していますが、ディスクからファイルを読み取ります。ファイルが大きすぎると、メモリを大量に消費してアプリがクラッシュします。そのため、代わりにアセットを直接読み取り、限られたサイズのみを読み取っています。次に、それをダブルバッファーとして管理し、必要なときに必要なAUGraphを取得します。

(注:オーディオキューサービスを使用でき、AudioUnitコールバックでAUGraphを使用できるかどうかを知りたいので、iOSフレームワークによってメモリが管理されます。)

私の問題は、Cの配列、構造体、およびポインターについて十分に理解していないことです。ヘルプが必要な部分は、単一のAudioBufferを保持する個々のAudioBufferListを取得し、そのデータをすべてを保持する別のAudioBufferListに追加することです。後で使用するデータ。memcpyを使用する必要があると思いますが、memcpyの使用方法や、目的のためにAudioBufferListを初期化する方法が明確ではありません。ディスクからファイルを読み込むAppleのサンプルプロジェクトであるMixerHostを参照用に使用しています。

Xcodeにロードしたい場合は、進行中の作業をアップロードしました。私はこれを行うために必要なことのほとんどを理解しました。データがすべて1つの場所に収集されたら、準備は整っているはずです。

サンプルプロジェクト:MyAssetReader.zip

ヘッダーでは、bufferListを構造体へのポインターとして宣言していることがわかります。

次に、この方法でbufferListを割り当てます。主に、MixerHostから借用しています...

最後に、読み取りをループします。

特にmemcpyで、mDataByteSizeとmDataを何を処理するのかわかりません。mDataはvoidポインターであるため、これは非常に注意が必要な領域です。

この行では、localBufferListのデータから、bufferListの位置に、データを書き込む場所にポインターを配置するためのフレーム数を加えた値をコピーする必要があると思います。これを機能させるために何を変更する必要があるかについて、いくつかのアイデアがあります。

  • voidポインターは1であり、AudioUnitSampleTypeのポインターのサイズではないため、memcpyを正しい位置に配置するには、sizeof(AudioUnitSampleType)も掛ける必要がある場合があります。
  • mDataを準備するためにmallocを適切に使用していない可能性がありますが、フレーム数がわからないため、初期化するために何をすべきかわかりません。

現在、このアプリを実行すると、bufferListへの無効なポインターでこの関数が終了します。

AudioBufferListの管理方法をよりよく理解するためにご協力いただきありがとうございます。

0 投票する
5 に答える
701 参照

c - これは void ポインタの適切な使用法ですか?

この質問は、特定の実装で void ポインターを使用することの妥当性に関するものです。

無限ループで構成される比較的単純なプログラムがあります。各ループで、プログラムは定数値の固定範囲を反復処理し、各値に対して関数を呼び出します。呼び出される特定の関数は、使用可能な 3 つの関数のいずれかであり、実行時に引数によって指定されます。無限ループが始まる前に、指定された引数に基づいて関数への関数ポインターを設定する条件ブロックがあります。このように、条件ロジックは、すべてのループのすべての反復ではなく、1 回だけ実行する必要があります。

これは私が実装したもので、うまく機能しますが、関数の呼び出しごとに状態を維持したいと考えています。私の提案は、状態を構造体に格納し、各値で関数を呼び出すときにその構造体を渡すことです。問題は、各関数がその状態の異なる値のセットを格納するために異なる構造体を必要とし、3 つの関数すべてのプロトタイプが (関数ポインターに関して) 互換性がなければならないことです。3 つの関数のプロトタイプで void ポインターを使用してこれを解決し、互換性のあるプロトタイプを維持しながら、各関数に異なる構造体を渡すことができるようにします。

質問は; 私の提案は void ポインターの適切な使用ですか、それとも実行時のダイナミズムが多すぎるので、アプローチを再考する必要がありますか?

注: 3 つの関数のそれぞれで静的変数を使用することはできません。構造体も無限ループで使用できる必要があるためです。これは、値の範囲が繰り返される前後に何らかの処理を行う必要があるためです。

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

c - C: 型を知らずに配列をコピーする

関数があり、配列へのポインターと関数へのポインターを受け取り、パラメーターで渡された関数によって定義された順序で新しい配列を返す必要があります。タイプを知らずにある配列の要素を別の配列にコピーする方法に関する私の問題

最後のパラメータを渡した関数

メインのコード:

arrSorted を実行した後、ガベージが含まれています。

私にとっての別のオプションは、コピーではなく、ある配列を他の要素にポイントすることです。それは可能ですか?

ありがとう。

0 投票する
6 に答える
42441 参照

c - void 型の配列

プレーンCには優れた機能があります-void型ポインター。これは、任意のデータ型へのポインターとして使用できます。
ただし、次の構造体があると仮定します。

値フィールドは、char 配列、int、またはその他のものを指す場合があります。
したがって、この構造体の新しいインスタンスを割り当てるときは、次のものが必要です。

1) この構造体にメモリを割り当てます。
2) 値にメモリを割り当て、それを値フィールドに割り当てます。

私の質問は、void ポインターのような別の型にキャストできる「void 型の配列」を宣言する方法はありますか?

私が望むのは、任意の型にキャストできる「柔軟なメンバー配列」(C99 標準の 6.7.2.1 で説明) を使用することだけです。

このようなもの:

token->value を char または int 配列として宣言し、後で必要な型にキャストするとこの作業が行われると思いますが、後でこのコードを読む人にとっては非常に混乱する可能性があります。