C:深度函数调用会导致异常行为?

标签 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! */
}

特别是,库提示缓冲区不够错误,而我很确定我已经在堆中分配了足够的内存来存储指纹图像(在这个函数内)。

问题是,第一个和第二个代码片段有什么区别?如果在不同位置调用函数,是否有可能表现不同?

最佳答案

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

关于C:深度函数调用会导致异常行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075440/

相关文章:

c - C 中的加密不起作用

c - С 条件下的类型转换

c++ - Open Watcom 的优点和缺点

c++ - 在 Vortex86DX 上从头开始构建和编译 GCC 5.2.0 时出错

c - 来自curl_easy_perform的管道数据

c - C中数组初始化错误

c - 使用 strcpy 数组输入错误

c - C 中 strcpy 函数后变量值发生变化

c - FFmpeg:对 av_frame_alloc() 的 undefined reference

c - 如何使用 execvp——查找文件参数