1

API ヘッダー ファイルで、奇妙な関数宣言を見つけました。

void API_GetParameter(API_SOMESTRUCT param[API_NUM_CONST]);

whereAPI_NUM_CONSTは列挙値であり、構造体であるため、それはその構造体の配列であるとAPI_SOMESTRUCT推測されます。param

したがって、この関数は、入力または変更する既存のデータ フィールドを想定しています。API 関数が内部で何をしているのかはわかりません。

現在、私のコードは次のようになっています。

API_SOMESTRUCT *param = new API_SOMESTRUCT[API_NUM_CONST];
API_GetParameter(param);
// ... read out param
delete[] param;
param = NULL;

しかし、最近発生したヒープ破損エラーの原因はこのコードにあるのではないかと考えており、呼び出しが正しいかどうかはわかりません。


次のようなパラメーターの非 const 配列を含む関数ヘッダーを理解しています。

void fun(int *arr); // expects a pointer to a non-const int array of arbitrary size...
  • では、API 関数宣言の正確な意味は何ですか?
  • param値または参照によって呼び出されていますか ?
  • そして、どうすればその関数を正しく呼び出すことができますか?
4

1 に答える 1

1

宣言void f(int x[3]);は と同じなvoid f(int *x); ので、関数は への有効なポインタを受け取る必要がありますAPI_SOMESTRUCT。そうしないと、何をしようとしているのか、何個の要素が期待されているのか、それらに対して何をしようとしているのかを知ることができません。ドキュメントを読む必要があります。

API_NUM_CONST推測する必要がある場合は、スタックに割り当てられたばかりの要素の配列を渡します。

API_SOMESTRUCT param[API_NUM_CONST]
API_GetParameter(param);
// use param
于 2012-02-21T12:02:57.613 に答える