Pytanie w sprawie stl, vector, c++, declaration, stdvector – Inicjalizacja wektorowa w C ++

1

Używam wektorów w moim kodzie.

Linia powodująca błąd jest następująca:

<code>vector<Node> alt_seq ;
alt_seq = vector<Node>(1000);
for(int j=0; j<alt_cf.getNoOfNodes(i); j++)
{
    Node temp_node = *alt_itr;
    alt_itr++;
    alt_seq.push_back(temp_node);
    }
</code>

Linia :

<code> alt_seq.push_back(temp_node);
</code>

powoduje błąd wykonania. Jeśli jednak zainicjalizuję wektor o pewnym początkowym rozmiarze w następujący sposób:

<code>vector<Node> alt_seq(1000) ;
</code>

W tym przypadku kod działa poprawnie. Nie chcę jednak podawać rozmiaru początkowego, ponieważ liczba obiektów w wektorze będzie zmienna w czasie wykonywania. Proszę pomóż mi. Jestem nowym użytkownikiem C ++.

Dla Twojej wygody pełna funkcja metody znajduje się tutaj:

http://pastebin.com/2dUFEui5

BTW, łącze pastebin nie ma definicji klasyNode zarówno. dirkgently
edytuj swoje pytanie, aby dołączyć kod zgłoszenia, nie podawaj nam linków do pastebin, które ostatecznie połączą zgniliznę Sam Miller
pastebin.com/zDbJikK7 To jest link do node.h i node.cpp Abhinav Arora
@dirkgently Połącz z node.h i node.cpppastebin.com/zDbJikK7 Abhinav Arora

Twoja odpowiedź

2   odpowiedź
0

vector obiekty, a następnie wykonajpush_back dodajesz do końca wektora, tzn. obiekty, które próbujesz dodać, mają wartość 1001, 1002 .... itd. Jeśli zadeklarujesz 1000vector obiekty nie dają błędu wykonania, najpierw zobaczę domyślną definicję (ponieważ pierwsze 1000 obiektów węzłów ma wartości domyślne), ponieważ nie jest to błąd i porównuje się z rzeczywistymi danymi, które próbuję załadować. Mam nadzieję że to pomoże.

3

Node klasa ma wskaźnikowy typ elementuCombinedFragment* nazywacfrag. Tworzy to zawieszone odwołania, jeśli nie zdefiniowano własnych operatorów kopiowania i przypisania. Ponadto wymagane jest odpowiednie zabezpieczenie przed wyciekami, jeśliNode jest odpowiedzialny za przydzielanie / zwalnianiecfrag. Jeśli nie chcesz kopiować głębokoCombinedFragment możesz użyć ashared_ptr.

Również domyślny ctor dlaNode prawdopodobnie nawet nie musi tam być (odchodzicfrag do stanu niezainicjowanego).

Jak powiedziałeś, dodałem trzy wielkie w następujący sposóbpastebin.com/g2n14awz  Daj mi znać, jeśli to uzupełnienie jest poprawne. Pomimo wprowadzenia powyższych zmian nadal daje błąd czasu wykonania. Proszę pomóż. Nie rozumiem mojego błędu. Abhinav Arora
this->cfrag = frag; wygląda na podejrzanego. Podczas kopiowania tworzysz kilka wskaźników wskazujących na to samoCombinedFragment obiekt. Teraz, jeśli jeden z nich zostanie usunięty, drugi stanie się wiszącym wskaźnikiem. Jakikolwiek dostęp do tegocfrag Obiekt jest UB. Więc zamiast surowego wskaźnika spróbuj użyć ashared_ptr<CombinedFragment> jako członek, aby nawet po usunięciu aNode obiekt, którego nie straciszCombinedFragment obiekt współdzielony przez innych użytkowników na żywoNode przedmioty. HTH. dirkgently
@AbhinavArora: Spróbuj dodać odpowiednią wielką trójkę i wróć, jeśli to nie rozwiąże twojego problemu! dirkgently
Dziękuję, spróbuję ... Jeśli chcesz spojrzeć na inne klasy w projekcie, kod można znaleźć w GitHubgithub.com/abhinavarora/mbt Abhinav Arora

Powiązane pytania