Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841

    [c/c++] strano problema di allocazione memoria su linux

    server::server(){
    port = 0;
    serverup = 0;
    loaded = 0;
    logfile = (char *) malloc(SERVER_PATHS_SIZE*sizeof(char));
    }

    int server::load(int in_id, char *in_name, char *in_ip, int in_port,
    char *in_rcon, char *in_logfile){

    int err;

    sprintf(name, "%s\x00", in_name);
    sprintf(ip, "%s\x00", in_ip);
    port = in_port;
    sprintf(rcon, "%s\x00", in_rcon);
    sprintf(logfile,"%s\x00", in_logfile);

    err = urt.set(ip, port, rcon);
    if(err < 1){
    printf("server::load(): error from urt.set()\n");
    return 0;
    }

    printf("server::load(): server %d loaded!\n", id);
    loaded = 1;

    return 1;
    }
    ho segnato in rosso le due righe che mi danno problemi.
    alla seconda riga in rosso arriva un bel (anzi brutto ) segmentation fault, come se non avessi allocato memoria per l'array logfile. Infatti se alloco la memoria nella stessa funzione il problema non si presenta.

    E' come se la memoria venisse rilasciata alla fine di ogni funzione e non mi desse la possibilità di tenerla allocata fino a quando non chiamo free o il programma non termina.
    cosa puo essere?
    su windows non mi è mai capitato ed è la mia prima volta che programmo su linux e ho sto problema!

    grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    ma chi ti dice che il problema sia in in_logifle, anziche in logfile?
    devi fare un debug.

    (char *) malloc(SERVER_PATHS_SIZE*sizeof(char));
    SERVER_PATHS_SIZE cos'è?

    io credo che ci sia un po' di confusione
    io credo che con logfile tu metta il percorso

    prova a fare logfile_handle = fopen(logfile,"r");

    ma il percorso lo devi mettere poi su logfile...tu stai semplicemente assegnando dello spazio vuoto in quel modo...e comunque istanzia una locazione in più per \0 terminatore di riga.
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

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.