C:深度函数调用会导致特殊行为吗?

时间:2011-11-10 05:43:14

标签: c

我有一个使用第三方库的程序(没有提供源代码)。 假设我们有一个名为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! */
}

特别是,库抱怨缓冲区没有足够的错误,而我很确定我已经在堆中分配了足够的内存来存储指纹图像(在此函数内)。

问题是,第一个和第二个代码段之间有什么区别?如果在不同的位置调用函数,是否有任何可能的行为?

2 个答案:

答案 0 :(得分:2)

如果您的缓冲区分配不正确,那么代码的重组很可能会改变行为。缓冲区溢出是未定义的行为,因此可能因此重组而有所不同。我想你需要再次查看问题中没有的缓冲区分配代码。

答案 1 :(得分:0)

在编译源代码时启用调试器信息后是否尝试调试程序(在Linux上,这意味着编译并与gcc -g -Wall链接,然后使用gdb)?