Modyfikacja dynamicznej tablicy struktur w funkcji

0

Hejo, mam problem i nie wiem jak powinien wygladac prawidlowy zapis w funkcji.
struktura:

 struct struktura{
char pole1;
int pole2;};

w mainie powiedzmy ze mam:

 struct struktura *tablica = NULL;

przekazuje do funkcji ten wskaznik zeby go zmallocowac

funkcja(&tablica);
//a tu funkcja:
void funkcja(struct struktura **tab)
{
	(*tab)=(tab*)malloc(N*sizeof(struct struktura));//jakies N, tu nie ma znaczenia
	for(int i =0; i < n;i++){
		(*tab)[i]->pole1 = i;
		(*tab)[i]->pole2 = -i;//przypisywana wartosc nei ma tu znaczenia
	}
}

mam problem z poprawnym zapisem dwoch ostatnich linijek. jesli ktos wie to niech napisze.
dzieki

0

Masz więcej problemów.

  1. W C nazwy N i n nie są tożsame.
  2. Wykonując rzutowanie trzeba podać nazwę typu, nie obiektu
*tab = (struct struktura *) malloc(N * sizeof(struct struktura));

aczkolwiek w C nie trzeba rzutować z/na void*:

*tab = malloc(N * sizeof(struct struktura));
  1. W tym zapisie do pola struktury trzeba odwołać się tak
(*tab)[i].pole1 = i;
(*tab)[i].pole2 = -i;

lub ewentualnie wspomóc się tymczasowym wskaźnikiem na bieżący obiekt

struct struktura *pom = tab[i];
pom->pole1 = i;
pom->pole2 = -i;
0

Dzieki za odpowiedz:
Ad 1. oczywiscie wiem o tym ale pisalem kod tutaj i po prostu chodzilo mi o przekazanie problemu a o tym n (N) zapomnialem
Ad 2. a ja wlasnie ciagle rzutuje bo mi tak powiedziano ze zwraca void. w dokumentacji(?) jest tak:

void* malloc (size_t size); 

czyli jakis wskaznik void(?) nie rozumiem za bardzo tego zapisu. rzutuje i dziala.
Ad 3. zapis ladnie wyglada w programie mam tak:

 *(tablica_MZI)[j].symbol = ' ' + i;

VS13 pokazuje 'expression must have struct or union type' cos nie dziala.

0
DRK napisał(a):

lub ewentualnie wspomóc się tymczasowym wskaźnikiem na bieżący obiekt

struct struktura *pom = tab[i];
pom->pole1 = i;
pom->pole2 = -i;

Przecież to jest jakieś mazanie po nieswojej pamięci. Żeby działało, to trzeba

struct struktura* pom = &(*tab)[i];

co z samej brzydoty od razu odrzuca takie rozwiązanie.

Craith napisał(a):

Ad 3. zapis ladnie wyglada w programie mam tak:

 *(tablica_MZI)[j].symbol = ' ' + i;
(*tablica_MZI)[j].symbol
0
twonek napisał(a):
(*tablica_MZI)[j].symbol

dalej ten sam blad. VS podkresla na czerwono "("

0
struct MZI{
	char symbol;
	int ilosc;
};
a to w mainie:
struct MZI *tablica_MZI = NULL;
1

Skoro tablica_MZI "ma tylko jedną gwiazdkę", a nie dwie jak tab w pierwszym poście, no to wystarczy

tablica_MZI[j].symbol
0

AYYY wiem gdzie mam blad. jako argument funkcji przyjalem kiedys **int i nie zmienilem jej na struct MZI. tam musi byc gwiazdka bo to funkcja ale znalazlem swoj blad. dzieki wielkie

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