В момента имам структура 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));
и след това присвоете стойности на id и size. Искам да добавя нова страница към pT вектора на структурата. Така че решавам, че мога да направя p1-> addP(makeP()), където makePreпревръща указател към 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