realloc- powiększanie liczby wierszy o 1

realloc- powiększanie liczby wierszy o 1
0

Witam , mam pewien problem.
Powiedzmy że deklaruje wskaźnik do wskaźników .
int tab;
tab = (int
)malloc(lines * sizeof *tab)
oczywiście robie też miejsce na kolumny ale nie o to mi chodzi.
Następnie chcę zwiększyć liczbę wierszy o jeden czyli daję

tab = (int)realloc(tab, (lines+1) sizeof(tab)); // gdy chcę dać **tab jako pierwszy argument to mi wyskakuje zła konwersjacja

oczywiście później musze malloc dla tej nowej linii
Następnie chce sprawdzić pierwszy element tej tablicy
cout << ((tab + 0) + 0); // a w takiej formie
i jest to całkowicie losowa liczba, tak jakby ten realloc kasował mi wszystkie elementy tej tablicy i nie wiem czemu się tak dzieje. Mógłby mnie ktoś naprowadzić co źle robię w tym reallocu ? Na razie nawet nie sprawdzam czy dodało tą linię.

Ola Nordmann
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad 8 lat
  • Postów:414
0

Używaj tagów code.

Kopiuj
tab = (int**)realloc(tab, (lines+1) * sizeof(tab));

<img src="http://scontent-a-vie.xx.fbcdn.net/hphotos-ash3/1379478_311850692288742_1730250652_n.jpg" />
Geniusz zua :>
0

Witam , mam jeszcze pytanko do tego, bo mi działa fajnie ale do jakiegoś czasu tzn gdy chcę kilka razy zwiększyć ilosć linii i do tej ostatniej linii przepisać znaki z innego to mi wywala błąd..
Ja robię tak że (gdy x to linia ktora chce skopiować i dać na koniec a *(iloscZnakow+lines) ( po polsku bo tylko dla przykładu zadania)to wskaznik do innej tablicy dynamicznej pprzechowującej ilosc znakow.

Kopiuj
 
*(tab + lines) = *(tab + x)
*(iloscZnakow + lines) = *(iloscZnakow+ x);
lines++;

I tu pytanie co robię źle, bo działa fajnie ale tam do kilku użyc,później sie crashuje.Czy mogę przeniesc tak znaki? Czy muszę po kolei każdy znak zmieniać?

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:11 dni
0

ten kod co podałaś można zamienić na:

Kopiuj
tab[lines]=tab[x];
iloscZnakow[lines]=iloscZnakow[x];
++lines;

Jeżeli rozmiary tablic są odpowiednie to nie powinno się kraszować.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
xxxmateusz00xxx
  • Rejestracja:ponad 11 lat
  • Ostatnio:około rok
  • Postów:45
0

Witam!
Mam nastepujaca metode w klasie matrix

Kopiuj
bool matrix::readFromFile(char* fileName)
{
    ifstream file;
    file.open(fileName);
    if(!file.good()) return false;
    file>>x>>y;
    tab = (double**) realloc(tab, x * sizeof(double*));
    for(int i = 0; i < x; ++i)
        tab[i] = (double*) realloc(tab, y * sizeof(double));
    for(int i = 0; i < x; ++i)
        for(int j = 0; j < y; ++j)
            file>>tab[i][j];
    return true;
} 

W klasie mam wskaznik do tablicy dwuwymiarowa (double **tab), na poczatku jest mallociem alokowana pamiec 1 x 1, pozniej chce z pliku odczytać rozmiar nowej macierzy i ja całą wczytac do powiekszonej tablicy.
Nie działa mi funkcja realloc, aczkolwiek nie wiem dlaczego.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.