C: Stack Overflow

Pagina 1 di 4 1 2 3 4 ultimo
Visualizzazione dei risultati da 1 a 10 su 32
  1. #1
    kibibyte L'avatar di Luca IT
    Registrato
    Jul 2001
    Messaggi
    442

    Predefinito Linguaggio C: Stack Overflow

    Perchè se metto un array char pippo[256][256][256] all'interno di un void mi dà quel tipo di errore??????????

    Come posso risolvere?????? Se si puo' ovviamente.

    Se mi chiedete lo scopo....:
    Io ho quel vettore all'interno di un ciclo. Ogni inizio ciclo voglio che il vettore si azzeri....come nuovo.

    Voi mi direte...usa la malloc. Già fatto.....e diventra "lentissimamente lento"..........

    Se avete suggerimenti.....ben venga io non s' che fare.....


    ciauz

  2. #2
    byte
    Registrato
    Mar 2002
    Località
    San Sebastiano (TO) - Italy
    Messaggi
    160

    Predefinito Re: C: Stack Overflow

    Originally posted by Luca IT
    Perchè se metto un array char pippo[256][256][256] all'interno di un void mi dà quel tipo di errore??????????

    Come posso risolvere?????? Se si puo' ovviamente.

    Se mi chiedete lo scopo....:
    Io ho quel vettore all'interno di un ciclo. Ogni inizio ciclo voglio che il vettore si azzeri....come nuovo.
    ciauz
    Ciao, Dunque...
    cosa intendi per mettere in un void ???
    forse void*** pluto = pippo ?

    Ma se vuoi azzerare il vettore non credo che tu ottenga cio' che desideri...

    Puoi mettere tutte le celle di un vettore a zero con una sola istruzione,
    poiche' in un array anche multidimensionale le celle sono contigue per definizione, con una chiamata a 'bzero' oppure 'bcopy,
    (se usi s.o. unix-like) (fai "man 3 comando" per maggiori info)
    con Dos-Win ci sara' qualcosa di simile...

    dopo aver calcolato la dimenzsione in byte del vettore...

    Comunque se il tuo algoritmo scandisce tutto il vettore ad ogni ciclo dovresti pensare di usare una struttura dati piu' efficente

    Se hai dubbi, chiedi pure...

    cia

  3. #3
    kibibyte L'avatar di Luca IT
    Registrato
    Jul 2001
    Messaggi
    442

    Predefinito Re: Re: C: Stack Overflow

    Originally posted by furetto
    Ciao, Dunque...
    cosa intendi per mettere in un void ???
    forse void*** pluto = pippo ?

    Ma se vuoi azzerare il vettore non credo che tu ottenga cio' che desideri...

    Puoi mettere tutte le celle di un vettore a zero con una sola istruzione,
    poiche' in un array anche multidimensionale le celle sono contigue per definizione, con una chiamata a 'bzero' oppure 'bcopy,
    (se usi s.o. unix-like) (fai "man 3 comando" per maggiori info)
    con Dos-Win ci sara' qualcosa di simile...

    dopo aver calcolato la dimenzsione in byte del vettore...

    Comunque se il tuo algoritmo scandisce tutto il vettore ad ogni ciclo dovresti pensare di usare una struttura dati piu' efficente

    Se hai dubbi, chiedi pure...

    cia


    VOID in C è praticamente una procedura.

    void pippo {
    ...
    ...
    ...
    }


    Uso winzoz non linux.

    Per azzerare un'array così......non so' come fare prorpio...altra gente mi ha detto che in un comando unico non si puo' fare. Spero si sbaglino.

    no lo scandisce proprio tutto.....poichè il singolo elemento lo uso come flag che assume valore 1 altrimenti 0. ma quando ho finito il ciclo....voglio che i valori siano a 0 o nulli...poco importa, l'importante è che siano diversi da 1

    se conosci qualche metodo speciale al di fuori di malloc e free.....

    ciauz

  4. #4
    byte
    Registrato
    Mar 2002
    Località
    San Sebastiano (TO) - Italy
    Messaggi
    160

    Predefinito errore

    opps , non so come togliere un post inutile...
    ormai e' qua' ...

  5. #5
    byte
    Registrato
    Mar 2002
    Località
    San Sebastiano (TO) - Italy
    Messaggi
    160

    Predefinito Re: C: Stack Overflow

    Originally posted by Luca IT
    VOID in C è praticamente una procedura.

    void pippo {
    ...
    ...
    ...
    }
    Uso winzoz non linux.

    Per azzerare un'array così......non so' come fare prorpio...altra gente mi ha detto che in un comando unico non si puo' fare. Spero si sbaglino.

    no lo scandisce proprio tutto.....poichè il singolo elemento lo uso come flag che assume valore 1 altrimenti 0. ma quando ho finito il ciclo....voglio che i valori siano a 0 o nulli...poco importa, l'importante è che siano diversi da 1

    se conosci qualche metodo speciale al di fuori di malloc e free.....

    ciauz
    Allora .... alcune precisazioni

    void e' una parola chiave non una procedura,
    poiche' un array in C non e' nienta altro che un puntatore alla prima cella dello spazio allocato per la tua richiesta
    pippo[256][256][256]

    (in effetti se tu vieni dal Pascal, una funzione C che restituisce un void in pratica non restiruisce nulla e corrisponde ad una procedura del pascal, serve al parser del compilatore per fare un controllo di tipo)

    io pensavo che dichiarassi un "puntatore a void"
    cosa alquanto inutile qui
    (visto che di solito si usa come parametro di funzioni che accettano puntatori a funzioni ...)

    fare malloc e free tutte le volte non mi sembra intelligente,
    ma esistono sicuramente funzioni di basso livello per assegnare ad un'area di mem il valore di zero binario cioe' riempirla con tutti zeri (la mem sara' indicata dal puntatore all' inizio (cioe' pippo) e dalla sua dim in byte)

    nota che char* pippo e pippo[] sono dello stesso tipo,
    ma pippo[][][] e di tipo char*** ....

    Ciao

  6. #6
    kibibyte L'avatar di Luca IT
    Registrato
    Jul 2001
    Messaggi
    442

    Predefinito

    Si scusa...void è una parola chiave....

    Comunque la cosa strana è che se metto l'array fuori dalla void e quindi come variabile statica lo accetta.....altrimenti no.

    ?!?!?!?!?!

    Oltretutto non capisco perchè mi dà errore la stak che è la memoria virtuale......ed io ho ben 1GB di RAM....praticamente inutilizzata???????

    ........


    ciauz

  7. #7
    byte
    Registrato
    Mar 2002
    Località
    San Sebastiano (TO) - Italy
    Messaggi
    160

    Predefinito stack

    Originally posted by Luca IT

    Oltretutto non capisco perchè mi dà errore la stak che è la memoria virtuale......ed io ho ben 1GB di RAM....praticamente inutilizzata???????


    ciauz
    Hello

    dunque ogni programma (in molti linguaggi tipo pascal, c , c++ ...)usa tre aree di memoria diverse, riservate per ogni processo (+o-)

    l'area per il codice (area text), e le variabili dichiarate (area dati)
    ed una per la memoria richiesta dopo (malloc
    etc... )

    e l' area (ottenuta a runtime) per le chiamate di funzione (lo stack),
    ( dove vengono messe le variabili, l' indirizzo di ritorno e varie altre informazioni),
    se hai ram libera la memoria virtuale non dovrebbe intervenire, che quindi non centra... (ma questo dipende dal s.o.)


    Nota:
    la dim massima di uno stack si puo' specificare nelle opzioni del compilatore
    {io ho uso gcc su Linuz (ovvio vabbe') e Borlanc TurboC in Dos, in quest'ultimo (il migliore per dos) puoi scegliere il tipo di progetto per fare questo...) }
    Comunque metti la parte relativa al problema, e' meglio,

    e poi prima di dichiarare un array cosi' grande
    (256 * 256 * 256 byte) = 64KB
    pensaci ...

    ma cosa devi fare ??

    ciao
    ---------------------
    P.S : nella risposta precedente si sono perse alcune righe, e una frase e' rimasta incompleta, se mi ricordo cosa volevo dire, lo edito e te lo dico...

  8. #8
    kibibyte L'avatar di Luca IT
    Registrato
    Jul 2001
    Messaggi
    442

    Predefinito

    Le ho provate tutte......l'unica cosa che ho capito è che non posso mettere all'interno di una void l'array che volgio io....di 16MB di dimensione. Non capisco proprio il funzionamento......


  9. #9
    byte
    Registrato
    Mar 2002
    Località
    San Sebastiano (TO) - Italy
    Messaggi
    160

    Predefinito



    Metti on-line le funzioni che accedono al vettore (e il codice che le richiama)
    e la dichiarazione dell' array, oppure spedisci ....

  10. #10
    byte
    Registrato
    Mar 2002
    Località
    San Sebastiano (TO) - Italy
    Messaggi
    160

    Predefinito 16 MB

    MI pareva strano solo 64K ma avevo usato la calcolatrice ...

    16Mega di char
    (1 char = 1 parola, su x86 1parola = 1 byte)

    ergo 16 MegaByte.... azzz
    Troppo .... altro che stack overflow

    ...

    mandami le funzioni che accedono e Che Dichiarano l'Array

    ciao

Pagina 1 di 4 1 2 3 4 ultimo

Informazioni Thread

Users Browsing this Thread

Ci sono attualmente 1 utenti che stanno visualizzando questa discussione. (0 utenti e 1 ospiti)

Discussioni simili

  1. stack overflow
    By spaceboy in forum -= Hardware generico =-
    Risposte: 13
    Ultimo messaggio: 26-09-2001, 21:00
  2. Errore di protezione, overflow di divisione e chi più ne ha più ne metta!!!!
    By melange in forum -= Sistemi Operativi Windows e software generale =-
    Risposte: 7
    Ultimo messaggio: 26-07-2001, 01:21
  3. PROBLEMA DI OVERFLOW DI WONDOWS AIUTO!!!
    By sledgehammer in forum -= Sistemi Operativi Windows e software generale =-
    Risposte: 1
    Ultimo messaggio: 19-05-2001, 19:03

Tags

Regole d'invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
nexthardware.com - © 2002-2022