繁体   English   中英

Arguments 在传入 function 时损坏?

[英]Arguments corrupted on passing in to function?

我看到了让我难过的东西。 或许各位大侠可以给点建议。

当传递给不同的 function 时,似乎有效的 arguments 会损坏。

这是我的设置:

  • LibA.a
  • LibB.a
  • 示例应用程序
  • MyApp.c

坏的 function 调用从 LibA 进入到 LibB。

LibA、LibB 和 SampleApp 都已由 Solaris x86/64 上的旧版 Sun Studio 预先编译(幸好处于调试模式)。 SampleApp 同时使用 LibA 和 LibB 并在我的系统上运行良好。

MyApp 以类似于 SampleApp 的方式使用 LibA 和 LibB。 然而,MyApp 由于指针损坏而崩溃。

// File scoped string declared
static const char myString[] = "SomeText"

// The function call looks like  
libAfunc(myString, myIntVar)

// The called function prototype is like 
int libAfunc(const char* strArg, int intArg)

单步执行代码时,我看到调用者 ( myString ) 中的指针有效并作为参数传递。 在被调用者中,传入的参数指针( strArg )中的地址完全错误。 其实所有参数传入之后其实都是错误的。

注意:调用者在预编译的LibA中,被调用者在预编译的LibB中。 我什至从未接触过该代码,因为它都是预编译的。 此外,代码本身可能是正确的,因为 SampleApp 使用了这些函数,并且运行良好。 (虽然调用顺序可能略有不同......)

我在想我的错误是在链接阶段,但我不确定它可能是什么。

有任何想法吗?

谢谢

你能用你的编译器编译 SimpleApp 吗? 它仍然有效吗?

我不熟悉您的特定平台,但曾经有一段时间使用某些编译器,其中指针的大小可能不同,具体取决于所使用的编译器选项。

如果您的编译器正在生成(例如)64 位指针并且库使用 32 位指针,那么您的症状是有道理的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM