В настоящее время у меня есть структура p, которая содержит вектор другой структуры с именем pg. Вот структура процесса:
struct p{
int i;
int s;
vector<pg*> pT;
void addP(struct pg* nP){
pT.push_back(nP);
}
};
Где-то еще в программе я создаю новую структуру p, выполнив:
struct p *p1= (struct p*) malloc(sizeof(struct p));
а затем присвойте значения идентификатору и размеру. Я хочу добавить новую страницу в вектор pT структуры. Поэтому я решаю, что могу сделать p1-> addP(makeP()), где makeP возвращает указатель на структуру pg, pg*.
Вот ссылка на то, что gdb показывает, когда он segfaults. Также упоминается, что это происходит в строке push_back. http://imgur.com/KZOGnI9
Что-то не так с указателями? Или я неправильно выделяю память для вектора?
malloc
не вызывает конструкторprocess
. Поэтому вашpageTable
построен неправильно, только зарезервирована память. Попробуйтеnew
! - person knivil   schedule 31.03.2016malloc
для создания новогоprocess
- конструктор дляpageTable
не будет вызываться - используйтеnew
- в конце концов, это C++... - person Paul R   schedule 31.03.2016malloc
. - person juanchopanza   schedule 31.03.2016new
вместоmalloc()
всякий раз, когда задействованы сложные классы C++, такие какstd::vector
. - person πάντα ῥεῖ   schedule 31.03.2016proc
динамически? Если вы не знаете, то не делайте этого. Простоprocess proc;
. - person juanchopanza   schedule 31.03.2016