私はサードパーティのライブラリ(ソースコードは提供されていません)を利用するプログラムを持っています。 DP_AcquireFingerprint()
という関数があるとします。この関数呼び出しは、指紋スキャナハードウェアから指紋画像を読み取るためにサードパーティのライブラリとインターフェイスします。C:深い関数呼び出しは特有の動作を引き起こしますか?
私はmain()
から直接この関数を呼び出すと、それが正常に動作します:
int main(int argc, char** argv) {
Matrix* mat;
DP_AcquireFingerprint(&mat); /* Works fine */
}
ただし、この機能は深い関数呼び出しに埋もれたときに奇妙な演技を開始します。例:
void func1(Matrix** mat) {
DP_AcquireFingerprint(mat);
}
void func2(Matrix** mat) {
func1(mat);
}
void func3(Matrix** mat) {
func2(mat);
}
void func4(Matrix** mat) {
func3(mat);
}
int main(int argc, char** argv) {
Matrix* mat;
func4(&mat); /* Not working! */
}
特に、ライブラリは、私は(この関数内)指紋画像を格納するために、ヒープに十分なメモリが割り当てられていることをかなり確信しているのに対し、バッファ十分な誤りがあることを訴えました。
質問は、最初のコードスニペットと2番目のコードスニペットの違いは何ですか?別の場所で呼び出された場合、関数が異なる動作をする可能性はありますか?
元の 'mat'ポインタは、この関数に渡す前に初期化するのか、それともその目的ですか? –
初期化は関数内で行われます。 – Andree