我看到的东西让我难过。也许你们大家可以提供建议。
当传递给不同的函数时,看似有效的参数会被破坏。
这是我的设置:
错误的函数调用从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使用这些函数,并且运行正常。 (虽然呼叫顺序可能略有不同......)
我认为我的错误是在链接阶段,但我不确定它可能是什么。
有什么想法吗?
谢谢
答案 0 :(得分:1)
您可以使用编译器编译SimpleApp吗?它还能用吗?
我不熟悉您的特定平台,但有一些编译器,指针可能有不同的大小,具体取决于所使用的编译器选项。
如果您的编译器生成(比方说)64位指针并且libs使用32位指针,那么您的症状是有意义的。