我有一个使用第三方库的程序(未提供源代码)。
假设我们有一个名为 DP_AcquireFingerprint()
的函数。此函数调用将与第三方库交互,以从指纹扫描仪硬件读取指纹图像。
当我直接从 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! */
}
特别是,库提示缓冲区不够错误,而我很确定我已经在堆中分配了足够的内存来存储指纹图像(在这个函数内)。
问题是,第一个和第二个代码片段有什么区别?如果在不同位置调用函数,是否有可能表现不同?
最佳答案
如果您的缓冲区分配不正确,那么重组代码很可能会改变行为。缓冲区溢出是未定义的行为,因此很可能与此类重组不同。我认为您需要再次查看问题中不存在的缓冲区分配代码。
关于C:深度函数调用会导致异常行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075440/