Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z realokacją pamięci tablicy unsigned long long [C++]

Ostatnio zmodyfikowano 2017-09-30 13:47
Autor Wiadomość
dlakin95
Temat założony przez niniejszego użytkownika
Problem z realokacją pamięci tablicy unsigned long long [C++]
» 2017-09-30 13:19:41
Witam,

mam problem z kodem.
C/C++
void ConfigDataPosition::addNewRecentPos( unsigned long long newPos ) {
    ushort numbOfRecentsPos = *( parent->getNumbOfRecentProjects() );
    unsigned long long * temp = new unsigned long long[ numbOfRecentsPos ];
    * temp = newPos;
    for( uint i = 1; i < numbOfRecentsPos; i++ )
         *( temp + i ) = *( recentProjectsPosition + i - 1 );
   
    delete[] recentProjectsPosition;
    recentProjectsPosition = temp;
}

Program otrzymuję nową wartość, którą ma umieścić na początku tablicy (recentProjectsPosition jest wskażnikiem na unsigned long long). Reszte z poprzedniej tablicy ma przepisać dalej. Tablica jest tworzona i wykorzystywana w innej części kodu, więc z całą pewnością działa.

Co najważniejsze, po pierwszym uruchomieniu i dodaniu nowej wartości program działa. Za drugim razem wywala program na <b> delete []recentProjectsPosition </b>.

Więc stara tablica jest usuwana, a nowy wskaźnik jest przekazywany do (recentProjectsPositon).

Z góry dzięki za pomoc.

EDIT. Chyba znalazłem problem. Jak coś to jeszcze napiszę.
P-165359
Kinexity
» 2017-09-30 13:30:18
Jeżeli dobrze rozumiem problem, to czy nie łatwiej byłoby użyć std::vector?
P-165360
dlakin95
Temat założony przez niniejszego użytkownika
» 2017-09-30 13:33:40
Można, ale przy tak prostych rzeczach jestem przyzwyczajony samemu sobie to opisać.
P-165361
dlakin95
Temat założony przez niniejszego użytkownika
» 2017-09-30 13:47:17
Dobra. Temat do zamknięcia.

Problemem okazała się inna część kodu.

W skrócie, wcześniej miałem zwiększaną wartość w innej części kodu, dlatego tu nie zwiększałem tablicy. Następnie zmieniłem kod tak, że najpierw wywoływałem tą funkcję i zwiększałem ilość. A jak widać w tej funkcji tego nie robiłem.
P-165362
« 1 »
  Strona 1 z 1