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ę.

0

Używaj tagów code.

tab = (int**)realloc(tab, (lines+1) * sizeof(tab));
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.

 
*(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ć?

0

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

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

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

0

Witam!
Mam nastepujaca metode w klasie matrix

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1