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.