[C] dynamiczna tablica

Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[C] dynamiczna tablica

Post autor: leg14 »

Chciałbym wczytywać sobie znaki do tablicy i dynamicznie zmieniac jej rozmiar (bo nei wiem ile znakow bede musial wczytac). Nastepnie chcialbym sobie te tablice przekazac do jakiejs funkcji i na niej dzialac.
Moja proba:

Kod: Zaznacz cały


int *tab;
tab = (int*) malloc(sizeof(int));

//wczytuje sobie pierwszy znak
int wczytany_znak;
wczytany_znak = getchar();
int i =0;
while(wczytany_znak!=EOF)
{
    tab[i] = wczytany_znak;
    tab = (int*) realloc(tab, sizeof(int));
    i++;
}


free(tab);


No i nie działa. Jak to naprawić?
Awatar użytkownika
Igor V
Użytkownik
Użytkownik
Posty: 1605
Rejestracja: 16 lut 2011, o 16:48
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 18 razy
Pomógł: 604 razy

[C] dynamiczna tablica

Post autor: Igor V »

1. Nie ma wczytywania kolejnych znaków w pętli.
2. Jeśli realokujesz pamięć, to powinieneś dawać jej rozmiar tak by starczyła na stare dane i nową.

Kod: Zaznacz cały

#include <stdlib.h>
#include <stdio.h>

int main()
{
  int *tab = (int*)malloc(sizeof(int));
  int wczytany_znak = 0;
  int i = 0;
  while((wczytany_znak = getchar())!=EOF)
  {
      getchar();
      tab[i] = wczytany_znak;
      int *tmp = (int*)realloc(tab, (i + 2)*sizeof(int));
      if(tmp != NULL)
      {
        tab = tmp;
      }
      else
      {
        printf("Error during allocation of memory!
");
        break;
      }
      i++;
  }
  free(tab);
}
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

Re: [C] dynamiczna tablica

Post autor: leg14 »

Aaaa! A ja myślałem, że realloc(*int,sizeof(coś)) doda mi do rozmiaru wskazywanego przez int rozmiar sizeof(coś). Dzięki.
ODPOWIEDZ