2013-11-26 2 views
1

У моей структуры есть вектор целых чисел. Однако при динамическом создании экземпляра структуры я не могу получить доступ к вектору.C++ Векторы и указатели struct

#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

вау таНос ... может просто хотите использовать 'new' там. malloc, вероятно, не построит вектор. –

ответ

4

Ваш вектор никогда не инициализируется, поскольку вы просто выделяете выделенную область памяти на astruct*, поэтому конструктор вашей структуры и, как следствие, конструктор std::vecotr никогда не вызывается. Вместо этого используйте новый оператор.

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

+1 за то, почему и как вместе! –

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; 
} 
Смежные вопросы