[英]Arguments corrupted on passing in to function?
我看到了让我难过的东西。 或许各位大侠可以给点建议。
当传递给不同的 function 时,似乎有效的 arguments 会损坏。
这是我的设置:
坏的 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.