传入函数时参数损坏了吗?

时间:2011-08-11 15:34:42

标签: c pointers linker solaris calling-convention

我看到的东西让我难过。也许你们大家可以提供建议。

当传递给不同的函数时,看似有效的参数会被破坏。

这是我的设置:

  • LibA.a
  • LibB.a
  • SampleApp
  • MyApp.c

错误的函数调用从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使用这些函数,并且运行正常。 (虽然呼叫顺序可能略有不同......)

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

有什么想法吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用编译器编译SimpleApp吗?它还能用吗?

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

如果您的编译器生成(比方说)64位指针并且libs使用32位指针,那么您的症状是有意义的。