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

    [C] Malloc dà i numeri

    codice:
    void delmanipulate (char *s) {
    
    	FILE *ptrdel;
    
    	int i = 0, j = 4, k = 0, x = 0, e = 0, n = 0;
    
    	char *del,*control;
    
    	char **mat;
    
    	n = stringcounter(s);
    
    	mat = (char **)malloc(n * sizeof(char));
    
    	for(x=0;x<n;x++)
    
    	mat[x] = (char*)malloc(STREAM*sizeof(char));
    
    	del = (char*)malloc(STREAM*sizeof(char));
    
    	control = (char*)malloc(STREAM*sizeof(char));
    
    	ptrdel = fopen("results.txt","r");
    
    	if(ptrdel==NULL) {
    	
    		printf("Errore nell'apertura del file\n\n");
    		
    		exit(0);
    	}
    
    	while(j<=STREAM) {
    		
    		if(s[j]=='+' || j==STREAM) {
    						
    			del[i]='\0';
    
    			break;
    		}
    		
    		del[i]=s[j];
    		
    		j++;
    		
    		i++;
    	}
    
    	i=0;
    
    	while((e=fgetc(ptrdel))!= EOF) {
    
    		if(((char)e) == '\0') {
    
    			control[i]='\0';
    
    			if((strcmp(control,del)) !=0) {
    
    				strcpy(mat[k],control);
    
    				i=0;
    
    				k++;
    
    			}
    
    			if((strcmp(control,del)) == 0) {
    
    				i=0;
    
    			}
    
    		}
    
    		if(e!=10 && ((char)e!='\0') && ((char)e!='\n')) {
    
    			control[i]=(char)e;	
    
    			i++;
    		}
    	}
    
    	fclose(ptrdel);
    
    	ptrdel = fopen("results.txt","w+");
    
    	for(x=0;x<k;x++) {
    
    		fprintf(ptrdel,"%s",mat[x]);
    		fprintf(ptrdel,"%c",'\0');
    		fprintf(ptrdel,"%c",'\n');
    	}
    
    	fclose(ptrdel);
    	free(mat);
    }
    Compilando questo programma ricevo un bel Segmentation Fault, quando vado a scrivere sulla 3/4 riga della matrice. Ora i miei dubbi sono :
    1 - Ho sbagliato l'utilizzo della malloc?
    2- Devo inizializzare la matrice, riempendola con caratteri casuali?
    3 -Se al posto della variabile 'n' nella malloc metto un numero grande dell'ordine di 30, il problema non si pone ed il programma viene eseguito perchè??!!

    P.S. La funzione stringcounter restituisce il numero di stringhe all'interno di un file di testo.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se questa riga

    mat = (char **)malloc(n * sizeof(char));

    deve servire ad allocare un array di stringhe, allora deve essere

    mat = (char **)malloc(n * sizeof(char *));

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [C] Malloc dà i numeri

    Originariamente inviato da ^EvAmPiReS^
    codice:
    mat = (char **)malloc(n * sizeof(char));
    Non mi è ben chiaro completamente cosa deve fare la tua funzione, comunque, così a prima vista, se con la prima malloc devi allocare un "array di stringhe", devi mettere sizeof(char*).
    codice:
    mat = (char **)malloc(n * sizeof(char*));
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Grazie mille ad entrambi ora va
    Dovevo allocare la dimensione di un puntatore a char e non di un char giusto? :master:

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Beh ... certo ...

  6. #6
    Per me ste cose non son scontate sto imparando

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da ^EvAmPiReS^
    Per me ste cose non son scontate sto imparando
    Non l'ho messo in dubbio ...

  8. #8
    Che sto imparando o che son cose scontate?

    Scherzo! :rollo: Stay relaxed. Grazie ancora.

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.