Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,202

    [C] Segmentation fault su array di stringhe globale

    Ciao

    Ho questo problema: quando creo un array di stringhe - o meglio, di char* - se questo è globale non riesco a scrivere dentro i suoi elementi, nè con strdup nè facendo a mano la malloc.
    Lo stesso codice usando lo stesso array ma locale, invece, funziona.

    Ad esempio:

    codice:
    incluso.h:
    
    #define MAX 10
    
    
    file1.c:
    
    int n=0;
    char* array[MAX];
    
    
    file2.c:
    
    extern int n;
    extern char* array[MAX];
    
    void fun(){
     array[0]=strdup(mia_stringa);
    }
    -> segfault


    codice:
    incluso.h:
    
    #define MAX 10
    
    
    file2.c:
    
    void fun(){
     char* array[MAX];  
     array[0]=strdup(mia_stringa);
    }
    -> non segfaulta ma duplica la stringa nell'elemento 0 del mio array.

    Vi ringrazio in anticipo per i suggerimenti
    Debian GNU/Linux sid
    Publishing a theory should not be the end of one's conversation with the universe, but the beginning. (Eric S. Raymond)
    Kernel 2.6.14-ck1

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non vedo problemi ... forse la causa è da qualche altra parte del codice ... mostralo tutto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,202
    e' un po' lungo

    quella variabile la uso lì per la prima volta, mi serve globale perchè dev'essere recuperata altrove e volevo evitarmi i passaggi di parametri

    se mi dici cosa cercare lo posto.

    non possono essere problemi hardware? Il codice non gira su PC ma su una scheda con la RAM al limite, ho già avuto qualche magagna abbastanza inspiegabile con gli spazi di memoria.
    Debian GNU/Linux sid
    Publishing a theory should not be the end of one's conversation with the universe, but the beginning. (Eric S. Raymond)
    Kernel 2.6.14-ck1

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Beh ... sì, potrebbe essere un problema di risorse ... non è facile dirlo senza avere altre info.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,202
    Che tipo di info possono servire?

    La RAM è sempre quasi satura ma c'è una partizione di swap, incollo anche i valori di ulimit.

    Codice PHP:
    # cat /proc/2338/limits
    Limit                     Soft Limit           Hard Limit           Units     
    Max cpu time              unlimited            unlimited            seconds   
    Max file size             unlimited            unlimited            bytes     
    Max data size             unlimited            unlimited            bytes     
    Max stack size            8388608              unlimited            bytes     
    Max core file size        0                    unlimited            bytes     
    Max resident set          unlimited            unlimited            bytes     
    Max processes             unlimited            unlimited            processes 
    Max open files            1024                 1024                 files     
    Max locked memory         65536                65536                bytes     
    Max address space         unlimited            unlimited            bytes     
    Max file locks            unlimited            unlimited            locks     
    Max pending signals       16382                16382                signals   
    Max msgqueue size         819200               819200               bytes     
    Max nice priority         0                    0                    
    Max realtime priority     0                    0                    
    Max realtime timeout      unlimited            unlimited            us        

    # free -m
                 
    total       used       free     shared    buffers     cached
    Mem
    :            59         58          1          0          4         27
    -/+ buffers/cache:         26         33
    Swap
    :           89          1         88 
    E' un programma C sotto Linux su architettura ARMEL, compilato con gcc via crosscompilazione.

    Il problema è semplice come l'ho descritto, gli array di stringhe globali mi segfaultano nonostante lo stesso codice su array locali nella stessa posizione nel flusso del programma funzioni

    Un modo per girare attorno al problema è usare una struct globale anzichè un array, ma non capisco perchè.

    codice:
    incluso.h:
    
    #define MAX 10
    #ifndef STRUCT_UPDATES
    #define STRUCT_UPDATES
    struct updates{
        char* name;
    };
    #endif
    
    file1.c:
    
    struct updates array[MAX];
    
    
    file2.c:
    
    extern int n;
    extern struct updates array[MAX];
    
    void fun(){
     array[0].name=strdup(mia_stringa);
    }
    Debian GNU/Linux sid
    Publishing a theory should not be the end of one's conversation with the universe, but the beginning. (Eric S. Raymond)
    Kernel 2.6.14-ck1

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 © 2024 vBulletin Solutions, Inc. All rights reserved.