3 Pluspunkte 0 Minuspunkte

Wie erstelle ich ein Array in C wenn ich zu Beginn nicht weiß wieviele Einträge es haben wird?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {

    int size = atoi(argv[1]);

    int intArray[size];

    int i = 0;
    while(i < size) {
        intArray[i] = i;
        i++;
    }

    printf("%d", intArray[3]);

    return 0;

}

Ich erhalte dabei diesen Fehler:

main.c:8:5: error: variable-sized object may not be initialized
von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Eine gängige Technik ist die Verwendung von dynamischem Speicher. Hier ist ein Beispiel.

#include <stdio.h>
#include <stdlib.h>

int main() {

    int size; // Größe des Arrays, die vom Benutzer eingegeben wird
    printf("Gib die Größe des Arrays ein: ");
    scanf("%d", &size);

    // Dynamischen Speicher für das Array reservieren
    int *array = (int *)malloc(size * sizeof(int));

    // Array mit Werten füllen
    for (int i = 0; i < size; i++) {
        printf("Gib den Wert für Element %d ein: ", i);
        scanf("%d", &array[i]);
    }

    // Array-Inhalte anzeigen
    printf("Array-Inhalte: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");

    // Dynamischen Speicher freigeben
    free(array);

    return 0;
}

Der Benutzer wird zuerst nach der Größe des Arrays gefragt. Dann wird dynamisch Speicher für das Array reserviert und der Benutzer wird aufgefordert, die Werte für die einzelnen Elemente einzugeben. Schließlich werden die Array-Inhalte angezeigt und der zuvor reservierte Speicher wird mit free() freigegeben, um Speicherlecks zu vermeiden.  Es ist wichtig, den reservierten Speicher mit free() freizugeben, um Ressourcenverlust zu verhindern.

von  
0 Pluspunkte 0 Minuspunkte

Der Fehler liegt in dieser Zeile:

int intArray[size];

da die Variable size zur Kompilierzeit nicht bekannt ist. 

Im Gegensatz zum statischen Speicher, der zur Kompilierzeit für Variablen verwendet wird, erlaubt es malloc, Speicher dynamisch zur Laufzeit zu allozieren, was besonders nützlich ist, wenn die Größe des benötigten Speichers erst während der Programmausführung bekannt wird. Die Funktion malloc gehört zur Standardbibliothek stdlib.h und hat folgende Signatur:

void *malloc(size_t size);

Hierbei steht size für die Anzahl der Bytes, die du für den dynamischen Speicher benötigst. Die Funktion gibt einen Zeiger vom Typ void * auf den Anfang des reservierten Speicherbereichs zurück. Da der Typ void * generisch ist, musst du diesen Zeiger in den gewünschten Datentyp umwandeln, bevor du darauf zugreifen kannst.

int *intArray = (int *)malloc(10 * sizeof(int));

In diesem Beispiel reserviert malloc Speicher für ein Array mit 10 int-Elementen und wandelt den zurückgegebenen Zeiger in einen Zeiger auf int um. Es ist wichtig zu beachten, dass nach der Verwendung des allokierten Speichers dieser mit der Funktion free freigegeben werden sollte, um Speicherlecks zu vermeiden.

free(intArray);
von