Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Array di grandezza impostata con variabile

    Salve, stavo cercando di fare un programma e una volta avviato si verifica un errore (il programma ha smesso di funzionare).

    codice:
    #include <stdio.h>
    
    int main()
    {
        int n;
        char c_bit1[n];
        char c_bit2[n];
        int bit1[n];
        int bit2[n];
        int c;
        
        printf("inserire il numero di bit di ogni numero\n");
        scanf("%d", n);
    Questo non è tutto il codice ma tanto si blocca prima di arrivare al printf, però con una piccolissima modifica, sostituendo ad uno qualsiasi degli array la grandezza da 'n' ad un numero qualsiasi, il programma funziona correttamente.

    codice:
    #include <stdio.h>
    
    int main()
    {
        int n;
        char c_bit1[n];
        char c_bit2[n];
        int bit1[4];
        int bit2[n];
        int c;
        
        printf("inserire il numero di bit di ogni numero\n");
        scanf("%d", n);
    C'è per caso un insolito limite che non permette di inizializzare più di tre array con la grandezza impostata dalla stessa variabile??

    Grazie in anticipo

  2. #2
    Il valore che imposti in "n" non è retroattivo... n "nasce" con un valore indeterminato (dipende da quello che è rimasto sullo stack), ed è con quello che vengono impostate le dimensioni di quegli array; poi ok, acquisisci un intero e lo metti in n, ma non serve a niente, gli array sono già stati dimensionati.

    Per risolvere, sposta la scanf prima della dichiarazione degli array.

    Nota comunque che gli array locali a dimensione non fissata in generale non sono una grande idea, dato che lo stack ha dimensioni limitate (pochi MB) e dimensioni troppo grandi per gli array ti mandano in crash il programma con uno stack overflow senza possibilità di farci niente; piuttosto, usa l'allocazione dinamica della memoria (malloc/calloc).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Ti ringrazio, pensavo che le dimensioni venissero inizializzate con la variabile 'n' e non con il suo valore nel momento della dichiarazione. Proverò ad usare malloc/calloc

  4. #4
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Inoltre, c' è da precisare che scanf VUOLE l' indirizzo delle variabili e non il loro "contenuto"
    codice:
    ...
    scanf("%d", &n);
    ...
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  5. #5
    Hai ragione mi ero dimenticato XD Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.