Speicherreservieren über Funktion mit realloc
-
Schönen guten Abend!
Habe eben ein kleines Problem. Ich habe eine Funktion, an die ich eine Zeigervariable übergebe, für die Speicher reserviert werden soll. Das will aber irgendwie nicht klappen.int int_SpeicherReservieren(int **Speicher, int Groesse) { int *Pruefzeiger; Pruefzeiger = (int*) realloc(*Speicher, Groesse * sizeof(int)); if(Pruefzeiger) { return 0; } else { return -1; } } int main() { int *TolleWerte = NULL; int Groesse = 3; if(!int_SpeicherReservieren(&TolleWerte, Groesse)) { TolleWerte[0] = 1; TolleWerte[0] = 2; TolleWerte[0] = 3; } return 0;
Kennt sich da jemand besser aus?
-
Da wäre es eine gute Idee, wenn du den neuen Zeiger, den realloc() geliefert hat, wieder zurückschreibst in den übergebenen Parameter.
PS: Ist es Absicht, daß du alle Zuweisungen in das erste Array-Element schreibst?)
-
CStoll schrieb:
Da wäre es eine gute Idee, wenn du den neuen Zeiger, den realloc() geliefert hat, wieder zurückschreibst in den übergebenen Parameter.
PS: Ist es Absicht, daß du alle Zuweisungen in das erste Array-Element schreibst?)
Danke für den Tipp!
Hab das eben nur schnell hingeschrieben. Ist wohl was schiefgegangen. Es sollten alle 3 Elemente angesprochen werden.
-
Ach Mist, wollte keinen Doppelpost machen. Hier die Lösung:
int int_SpeicherReservieren(int **Speicher, int Groesse)
{
int Pruefzeiger;
Pruefzeiger = (int) realloc(*Speicher, Groesse * sizeof(int));
if(Pruefzeiger)
{
*Speicher = Pruefzeiger;
return 0;
}
else
{
return -1;
}
}int main()
{
int *TolleWerte = NULL;
int Groesse = 3;if(!int_SpeicherReservieren(&TolleWerte, Groesse))
{
TolleWerte[0] = 1;
TolleWerte[1] = 2;
TolleWerte[2] = 3;
}return 0;
}Danke CStoll!
-
Ich dachte, in C wird ein
void*
implizit in den gesuchten Zeiger gecastet, oder?
-
EOutOfResources schrieb:
Ich dachte, in C wird ein
void*
implizit in den gesuchten Zeiger gecastet, oder?Korrekt.
-
314159265358979 schrieb:
Korrekt.
Dann hat der Code von Kabelbinder einen Cast zu viel.