簡體   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