返回此函數時出現了分段錯誤(最後一段),我不知道爲什麼(我瘋了,因爲無法理解這個問題)。返回時出現分段錯誤
frase
是一個全局變量。該函數是另一個函數的副本,我只修改了最後一個函數(之前我寫了一條評論以更好地展示)。如果函數在{cout<<"404 "<<endl;return 404;}
處返回,則不會發生錯誤。我希望我已經解釋了一切必要的東西。
int funzione_principale()
{
//string frase;
char frase_char [1024]={'\0'};
char frase_elaborata [1024]={'\0'};
PlaySound(TEXT("Avviso.wav"), NULL, SND_FILENAME);
rec(); //REGISTRO L' AUDIO
while(active)
Sleep(50); // HERE I WAIT OTHER FUNCTION TO COMPLETE!
if(frase.length()<=14)
{
cout<<"404 "<<endl;return 404;
}
frase.copy(frase_char,frase.length()-57,56);
for(int k=0; frase_char[k]!='"';k++)
{
frase_elaborata[k]=frase_char[k];
}
//tramite fparole otteniamo il numero di parole contenute nella frase_elaborata
righe=fparole(frase_elaborata);
//MANIPOLAZIONE DELLE PAROLE NELAL FRASE TRAMITE MATRICE
char matrice [righe][27];
for(int x=0;x<=righe;x++)
memset(matrice[x],0,27);
int conto=0;
int indice=0;
int riga=0;
int lunghezza=strlen(frase_elaborata);
minuscole_accenti(frase_elaborata);
cout<<"Frase tradotta: "<<frase_elaborata<<endl;
while (frase_elaborata[conto]!='\0')
{
if(frase_elaborata[conto]>=97 && frase_elaborata[conto]<=122)
{
matrice[riga][indice]=frase_elaborata[conto];
indice++;
}
if(frase_elaborata[conto]>=48 && frase_elaborata[conto]<=57)
{
matrice[riga][indice]=frase_elaborata[conto];
indice++;
}
if(frase_elaborata[conto]==' ' && conto!=lunghezza-1 && frase_elaborata[conto+1]!=' ')
{
matrice[riga][indice]='\0';
indice=0;
riga++;
}
conto++;
}
//ADESSO LA MATRICE CONTIENE NUM RIGHE CON OGNIUNA, UNA PAROLA DELLA FRASE
cout<<"Frase presente nella matrice: "<<endl;
for(int x=0;x<=righe;x++)
cout<<matrice[x]<<endl;
// FROM HERE I MODIFIED THE FUNCTION !
for(int t=0;t<=righe;t++)
{
if(strcmp(matrice[t],"s")==0)
{return 1;}
if(strcmp(matrice[t],"si")==0)
{return 1;}
if(strcmp(matrice[t],"affermativo")==0)
{return 1;}
if(strcmp(matrice[t],"ok")==0)
{return 1;}
if(strcmp(matrice[t],"certo")==0)
{return 1;}
if(strcmp(matrice[t],"no")==0)
{return -1;}
if(strcmp(matrice[t],"negativo")==0)
{return -1;}
if(strcmp(matrice[t],"dopo")==0)
{return 0;}
if(strcmp(matrice[t],"rimanda")==0)
{return 0;}
if(strcmp(matrice[t],"rimandalo")==0)
{return 0;}
if(strcmp(matrice[t],"non")==0 && strcmp(matrice[t+1],"ora")==0)
{return 0;}
if(strcmp(matrice[t],"chiedi")==0 && strcmp(matrice[t+1],"dopo")==0)
{return 0;}
if(strcmp(matrice[t],"chiedimelo")==0 && strcmp(matrice[t+1],"dopo")==0)
{return 0;}
}
return 404;
}
是'matrice [t + 1]'在最後一個循環中是否正確?看起來像訪問數組越界...(沒有讀取所有代碼) – tomse
是的,這是正確的。你說得對,我會解決的,謝謝! (但是,這不是一個大問題,因爲我確定如果strcmp關於matrice [t]和「non」(和另一個)返回0,這意味着矩陣[t + 1]可以訪問。 – Alan