2013-11-26 113 views
1

我的結構有一個整數向量。但是,動態創建結構的實例時,我似乎無法訪問該向量。C++向量和結構指針

#include <stdlib.h> 
#include <iostream> 
#include <vector> 
using namespace std; 

typedef struct { 
    vector<int> intList; 
} astruct; 

int main() 
{ 
    astruct* myStruct = (astruct*) malloc(sizeof(astruct)); 
    myStruct->intList.push_back(100); 
    cout << "Hello world!" << endl; 
    free(myStruct); 
    return 0; 
} 

嘗試向結構向量中添加100會導致程序崩潰。你好,世界!從未顯示。這是怎麼回事?

+0

哇的malloc ...可能只是想使用'new'那裏。 malloc不會構造向量。 – 2013-11-26 20:44:58

回答

4

您的向量從未被初始化,因爲您只是將已分配的內存區域轉換爲astruct*,因此您的結構的構造函數因此不會調用std::vecotr的構造函數。改爲使用新運營商

astruct* myStruct = new astruct(); 
myStruct->intList.push_back(100); 
delete myStruct; 
+0

+1爲什麼和如何在一起! – 2013-11-26 20:47:08

1

除非你知道自己在做什麼,你不應該使用malloc()/free()在C++程序,特別是用於創建C++對象。因此,使用new/delete代替:

int main() 
{ 
    astruct* myStruct = new astruct; 
    myStruct->intList.push_back(100); 
    cout << "Hello world!" << endl; 
    delete(myStruct); 
    return 0; 
}