我看到了一些让我困惑的东西。也许大家可以提供建议。
当传递给不同的函数时,看似有效的参数会被损坏。
这是我的设置:
- LibA.a
- LibB.a
- 示例应用
- MyApp.c
错误的函数调用是从 LibA 进入 LibB。
LibA、LibB 和 SampleApp 均已由 Solaris x86/64 上旧版本的 Sun Studio 进行了预编译(幸运的是在 Debug模式下)。 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 位指针,那么您的症状就有意义。
关于c - 参数在传递到函数时被破坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7028702/