Hier ist der Code in Frage, es ist eine Funktion, die einen int-Array reallocs und fügt eine Zahl am Ende davonWarum gibt mir diese Realloc-Instanz SIGABRT?
int *add_to_array(int *arr, unsigned int num, int newval)
{
if(arr != NULL){
int *newarr = realloc(arr, sizeof(int) * (num+1));
if(!newarr){
free(arr);
}else{
free(newarr);
}
arr[num] = newval;
return arr;
}
else{
return NULL;
}
}
Problem ist, wenn ich diese Funktion einmal anrufen, es funktioniert gut, aber wenn ich nennen es ein zweites Mal, der Debugger gibt mir eine SIGABRT an der Linie
int *newarr = realloc(arr, sizeof(int) * (num+1));
Hier ist, wie ich die Funktion
Aufruf binarray = add_to_array(array, 5, 10);
array = add_to_array(array, 6, 100);
EDIT: habe ich es geschafft zu s Ølve dies mit diesem neuen Code
int *add_to_array(int *arr, unsigned int num, int newval)
{
if(arr != NULL){
int *newarr =realloc(arr, sizeof(int) * (num+1));
if(!newarr){
return NULL;
}else{
newarr[num] = newval;
return newarr;
}
}
else{
return NULL;
}
}
Noch eine Frage, für den Fall, wobei realloc den gegebenen Zeiger arr realloc ausfällt, tut arr in diesem Fall null wird oder ist es immer noch gültig?
Sie reservieren also ein neues Array (das alte Array wird dabei freigegeben), dann geben Sie das neue Array frei und schreiben dann Daten in das alte Array, das jetzt freigegeben wird? – immibis
Wenn die Zuweisung fehlschlägt, geben Sie den Speicher frei, auf den der Zeiger auf das ursprüngliche Array zeigt. Wenn dies gelingt, geben Sie den Speicherplatz frei, den Sie erfolgreich zugewiesen haben, und schreiben Sie ihn? – user3078414
'if (! Newarr) { frei (arr); zurück NULL; } sonst { arr = newarr } ' – BLUEPIXY