Voici donc mon erreur:
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_S_create
Aborted (core dumped)
et voici mon code:
//Code removed
string generateSong(string list[], int num)
{
//Code removed
//Code removed
for (i = 0; i < num; i++)
{
output += list[i];
output += bone1;
output += list[i + 1];
output += bone2;
}
return output;
}
int main()
{
string list[9] =
{
//Code removed
};
//Code removed
return 0;
}
Je voudrais juste savoir ce que signifie cette erreur, donc je sais comment y remédier. J'ai vu de nombreux messages avec des erreurs similaires, mais rien de pareil. Je débute littéralement en C++, et aucune de ces réponses n'a de sens avec ce que j'ai appris jusqu'à présent. Comme vous pouvez le voir, c'est un programme simple pour sortir une chanson. Il est destiné à m'aider à pratiquer les cordes pour le cours que je prends, mais cela n'a absolument aucun sens pour moi et le livre n'est pas très utile non plus. Quelqu'un pourrait-il m'expliquer cela?
P.S. Dans le cas où cela serait utile, il compilera en utilisant g ++, mais quand il s'exécutera, il donnera cette erreur (donc en gros ce n'est pas une erreur de compilation, c'est une erreur d'exécution).
Cette partie du code est suspecte:
for (i = 0; i < num; i++)
{
output += list[i];
output += bone1;
output += list[i + 1]; // <--- here
output += bone2;
}
Votre tableau a une longueur de 9, donc les indices valides vont de 0, 1, 2, ..., 8. À l'itération 8, la ligne indiquée essaiera de lire l'index du tableau 9, qui n'est pas valide. Il en résulte un comportement indéfini, qui dans votre cas est un message d'erreur trompeur sur une chaîne non valide.
Vous devrez décider des mesures que vous souhaitez prendre pour résoudre ce problème, mais je pense que c'est la cause immédiate du problème.
J'espère que cela t'aides!
Si vous avez 9 os, vous ne devez imprimer que 8 connexions, pas 9. Sur la dernière, vous référencez bone[8]
& bone[9]
. bone[9]
n'existe pas.