2012-01-23 42 views
2

我正在嘗試使用C++而不是C來爲我的基於MIPS的嵌入式設備構建我的應用程序。首先,我有一個鏈接問題,你可以看到here。解決了這個問題,我可以成功構建我的應用程序。現在,我想使用std::vector類。我的代碼是:使用向量導致的段錯誤

#include <vector> 
using namespace std; 

int main() { 
    vector<char> v; 
    v.push_back('s'); 

    return 0; 
} 

vector<char> v;線執行時,屏幕上出現Segment Fault消息。對於更多測試,我測試了new運營商,它工作正常。我正在使用mipsel-elf-g++來構建我的應用程序。

有什麼不對?

+5

從您之前的問題看來,您的C++編譯器很破碎。如果第一次使用'malloc'和'new' segfault,沒有理由認爲'std :: vector'不會。 http://stackoverflow.com/questions/8956979/segment-fault-caused-by-using-new-and-malloc – NPE

+0

代碼似乎很好。如果是段錯誤,那麼作爲一個工作可以在聲明'vector'時分配一些空間。即'vector v(100);'並試一試。 – iammilind

+0

@aix:'malloc'和'new'問題已修復,現在我可以同時使用這兩個問題。在我的問題中,我提到'我測試了新的操作符並且工作正常',以強調存在任何內存分配問題。 –

回答

1

我假設你已經交叉構建了mips的C++庫。檢查該庫是否已正確構建,並且是否真正爲您的mips配置。你也可以在gdb中加載可執行文件,並查看崩潰發生的位置。我會認爲它發生在libC++的某處。

+0

我是一名初學嵌入式程序員,我不知道如何交叉構建「MIPS」的C++庫。我正在使用'cygwin'。我應該怎麼做才能跨C++庫? –

+0

您的MIPS交叉編譯器套件適用於Cygwin?確保你真的使用了正確的編譯器。有各種MIPS衍生產品,編譯器套裝必須符合_Iour_ MIPS規範。 – boto

+0

我正在使用'Cygwin'中存在的'mipsel-elf-gcc'和'mipsel-elf-g ++'編譯器。我不知道這些是否合適? –

2

如註釋中所述,您的編譯器和/或其運行時庫已損壞。 (你可以排除操作系統,因爲「精靈」目標意味着你沒有在目標上運行操作系統,如果它不存在,它不能被破壞。)

而不是嘗試調試Cygwin的mipsel-elf-gcc包,這可能是舊的,沒有很好的測試,我只是建議使用不同的編譯器。特別是,Mentor Graphics的「Sourcery CodeBench精簡版」版本的GCC編譯器和相關的C和C++庫可從http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/免費下載 - 它應該基本上作爲Cygwin編譯器的替代品使用(包括正常使用Cygwin路徑,即使它名義上構建爲「普通Windows」編譯器),不同之處在於它已經過測試和驗證,實際上可以正常工作。

[免責聲明:我爲Mentor Graphics工作,所以我不能說我沒有偏見 - 但我們做了很多工作來使這個編譯器工作,並且MIPS與我們簽約以使其可用世界是免費的,所以我們有動力確保它的正確性。此外,如果您熟悉CodeSourcery「Sourcery G ++」編譯器,則「Sourcery CodeBench」現在是CodeSourcery屬於Mentor Graphics的新名稱。]