Sie verarbeiten keinen Eingabefehler. Wenn scanf
nicht gelesen werden kann, hat Ihr Programm undefiniertes Verhalten, was dazu führen kann, dass es schnell genug Speicher verbraucht und dann abstürzt.
Es wird auch empfohlen, realloc
Fehler zu behandeln, und auch nicht jedes Mal neu zuweisen.
das alles zusammen Einlochen, und die Vermeidung auch das Hinzufügen -1 auf das Array, könnte es etwa so aussehen:
/* values are read into this buffer */
int size = 16, count = 0;
int *a = malloc(size * sizeof(int));
/* loop control variables */
int done = 0;
int error = 0;
/* temporary variables */
int val, new_size, *new_a;
while(!done)
{
/* double the buffer size when required */
if(count == size)
{
new_size = size * 2;
new_a = realloc(a, new_size * sizeof(*a));
if(!new_a) {
perror("Realloc failed");
error = 1;
break;
} else {
a = new_a;
size = new_size;
}
}
/* read value and finish on input error or if user enters -1 */
if(1 != scanf("%d", &val) || val == -1) {
done = 1;
} else {
a[count++] = val;
}
}
Bitte definieren „zu viel Speicher“. Und welchen Wert erwarten Sie 'a [i-1]' zu sein, wenn 'i' 0 ist? – kaylum
ok, und wie kann ich es in Alternative tun? – fenigo69
Was tun? Um das 'a [i-1]' Problem zu beheben, können Sie den Loop von 'while' in' do/while' ändern. – kaylum