Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    4

    Segmentation fault e calloc

    Salve ragazzi, sto cercando di creare un array di stringhe su cui scrivere il nome di diversi file da aprire successivamente.
    Il codice incriminato è questo:
    codice:
    char **nome;
    int i;
    
    nome=(char**)calloc(c->N,9*sizeof(char));
    for(i=0;i<c->N;i++){
    	nome[i]=(char*)malloc(9*sizeof(char));
    	if(i == 0) nome[i] = "dat0.dat";
    	else {
    		nome[i] = nome[i-1];
    		nome[i][3]++;
    	}
    	printf("%s\n",nome[i]);
    }
    dove c->N è una variabile in una struct che può assumere un valore da 1 a 9.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Re: Segmentation fault e calloc

    codice:
    nome=(char**)calloc(c->N,9*sizeof(char *));
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    4
    Grazie ho corretto, ma il problema persiste.
    Fintanto che eguaglio le stringhe tutto bene, ma nel momento in cui devo cambiare il valore di nome[i][3] mi dà segmentation fault... e ciò vale anche se metto tipo nome[i][3]='o';

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Mi segna c undeclared,cosa intendi con la notazione:

    codice:
    c-->N
    c che valore aveva?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Non avevo letto bene il codice, ci sono altri due errori:

    codice:
        // Niente moltiplicazione per 9 in questa riga
        nome = (char**)calloc(c->N,sizeof(char *));
    Poi, le stringhe non si copiano in quel modo, ma così:

    codice:
            else {
                strcpy(nome[i], nome[i-1]);
                nome[i][3]++;
            }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    4
    c è un puntatore a una struct dichiarata altrove... e il valore intero di c->N viene preso da stdin...
    per ora sto facendo tutte le prove ponendo c->N = 9

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    4
    Originariamente inviato da LeleFT
    Non avevo letto bene il codice, ci sono altri due errori:
    codice:
        // Niente moltiplicazione per 9 in questa riga
        nome = (char**)calloc(c->N,sizeof(char *));
    Grazie! Effettivamente era questo l'errore.
    Poi, le stringhe non si copiano in quel modo, ma così:

    codice:
            else {
                strcpy(nome[i], nome[i-1]);
                nome[i][3]++;
            }
    Ciao.
    Sì... mi ero dimenticato di questo comando perché l'anno scorso il mio professore, per verificare la nostra conoscenza sulle stringhe, ci aveva tassativamente vietato di utilizzarla.
    Grazie mille

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.