Wpis z mikrobloga

#programowanie #clang #jezykc mam takie pytanko...
mam tu funkcję, która ma na celu zwiększenie rozmiaru istniejącej tablicy.
Jest to funkcja int *increaseSize(int* A, int freqCount).
W tym przypadku robi to dwukrotnie.
Jak widać po prawej stronie, tablica przed zmianą rozmiaru jest elegancko wypełniona wartosciami, wszystko chodzi dobrze...
natomiast po uruchomieniu funkcji (cześć po lewej stronie), choć niektóre wartości stoją dobrze na swoim miejscu, to inne zmieniają na jakieś ogromne liczby. mnie się wydaje że są zamienione z miejscem w pamięci dla argumentu tej tablicy.
teraz pytanie, w czym leży problem?
1. czy to kwestia błednego zastosowania funkcji realloc?
2. czy możę w takim przypadku powinienem najpierw skopiowac cala tą tablice ze wszystkimi argumentami do nowej tablicy 'ala schowek, po czym wtedy dopiero zwiększyć rozmiar pierwotnej tablicy i wówczas na koncu przekopiować argumenty spowrotem z tablicy schowka do tablicy "matki" ??
dziękuje
źródło: comment_O4DNfJqD2MaX1ImipBLd3O7wTHMqoVNc.jpg
  • 7
@Kaczus2B: tylko teraz pojawia się problem podczas wywolania funkcji:

A = increaseSize(A, freqCount);

doprzodu.c:137:20: warning: passing argument 1 of 'increaseSize' from incompatible pointer type [-Wincompatible-pointer-types]
A = increaseSize(A, freqCount);
^
doprzodu.c:64:6: note: expected 'int *' but argument is of type 'int **'
int *increaseSize(int *A, int freqCount);
^~~~~~~~~~~~
doprzodu.c:137:5: warning: assignment to 'int **' from incompatible pointer type 'int *' [-Wincompatible-pointer-types]
A = increaseSize(A, freqCount);
@Kaczus2B: @JungleJamPL:

To raz, ale blad ktory mu wywala jest w funkcji freqRepeat i prawdopodobnie przez
realloc(A, 2*sizeof(int)), bo alokuje tablice na rozmiar 2 intow, a nie dwukrotnosci starej tablicy.

Jak juz uzywasz jednego stylu przekazywania wartosci: zwracania lub przez wskaznik to lepiej badz konsekwentny.