【问题标题】:C: Deep function call cause peculiar behaviour?C:深度函数调用会导致异常行为?
【发布时间】:2011-11-10 05:43:13
【问题描述】:

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

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

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

【问题讨论】:

  • 应该在传递给这个函数之前初始化原来的mat指针,还是这个函数的目的?
  • 初始化在函数内部完成。

标签: c


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-22
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      相关资源
      最近更新 更多