Je rencontre des problèmes avec un tableau de chaînes qui semblent envahir un espace de mémoire réservé. Le code est trop grand pour poster ici, donc je posterai la partie importante ci-dessous:Erreur de segmentation avec un tableau de chaînes
int main (){
int i = 0, j = 0, k = 0, count = 0, numLinhas = 0, l = 0;
char string[100][100];
char line [17];
char str[4];
char str1[5];
char str2[4];
char str3[4];
FILE *p;
p = fopen("text.txt", "r");
while(fgets(line, sizeof line, p)!=NULL){
printf("%s", line);
strncpy(string[i], line, 17);
i++;
numLinhas++;
}
fclose(p);
char *temp[numLinhas];
Après cela, il va dans une boucle qui stocke dans string [i]
le sens de la déclaration contenue dans le fichier. Le début des exemples for et three est indiqué ci-dessous:
for (i = 0; i<numLinhas; i++){
sscanf(string[i], "%s %s %s %s" ,str1, str,str2, str3);
if(str[0]=='0' && str[1] == '0' && str[2]!= 'd') {
temp[i] = "NOP";
count++;
}
if(str[0]=='0'&& str[1] == '6' && str[2]!= 'd') {
sprintf(temp[i],"%s,%s" , "MVI B", str2);
count = count+2;
}
if(str[0]=='0'&& str[1] == '7' && str[2]!= 'd') {
temp[i] = "RLC";
count++;
}
L'erreur est occasionnelle - cela ne se produit pas toujours. Et cela se produit généralement quand il y a un appel à sprintf. Ah oui! Et ci-dessous est le fichier txt je charge en tant qu'exemple:
0000 21a 11r 00r
0003 7Ea
0004 21a 12r 00r
0007 46a
0008 80a
0009 21a 13r 00r
000C 77a
000D 3Ea 01a
000F 3Da
0010 76a
0011 0Ad
0012 03d
0013 01d
Juste vu quelque chose de nouveau. voici la fenêtre de compilation je reçois:
[email protected]:~/Desktop$ ./paraler
0000 21a 11r 00rValor de l: 16
Valor de l: 1
0003 7Ea
Valor de l: 9
0004 21a 12r 00rValor de l: 16
Valor de l: 1
0007 46a
Valor de l: 9
0008 80a
Valor de l: 9
0009 21a 13r 00rValor de l: 16
Valor de l: 1
000C 77a
Valor de l: 9
000D 3Ea 01a
Valor de l: 13
000F 3Da
Valor de l: 9
0010 76a
Valor de l: 9
0011 0Ad
Valor de l: 9
0012 03d
Valor de l: 9
0013 01d
Valor de l: 9
string:0000 21a 11r 00r
string:
string:0003 7Ea
string:0004 21a 12r 00r
string:
string:0007 46a
string:0008 80a
string:0009 21a 13r 00r
string:
string:000C 77a
string:000D 3Ea 01a
string:000F 3Da
string:0010 76a
string:0011 0Ad
string:0012 03d
string:0013 01d
Segmentation fault
La chose étrange est que je reçois des espaces vides du tableau de chaînes ... At-il quelque chose à voir avec l'erreur?
Avez-vous essayé d'exécuter votre code dans un débogueur? – nmichaels
L'étape 1 serait de remplacer le sprintf dangereux avec le snprintf de sécurité. –
Veuillez faire quelque chose au sujet de la mise en forme de votre code. L'indentation dans le deuxième bit semble foiré. – JeremyP