dans mon code j'utilise malloc pour créer n string pour mon projet et après cela, j'ai créé «TR» pour mettre toutes les ficelles de ** STR avec de petites lettres. et cela me donne une erreur:
Échec du chèque de temps d'exécution n ° 3 - La variable 'str' est utilisée sans être initialisée. P> blockQuote> blockQuote>
xxx pré> p>
3 Réponses :
Vous avez ces deux sections de code dans le mauvais ordre: Vous devez attribuer la mémoire pour Il devrait être: p> < Pré> xxx pré> après p> aussi, veuillez lire Est-ce que je jette le résultat de malloc? et Pourquoi est-il considéré comme une mauvaise pratique pour omettre des accolades? P> P> STR code> avant de pouvoir attribuer à str [ I] code>. Et il devrait être tailleof (char *) * n code>; Il n'est pas nécessaire d'ajouter 1 à ceci (vous n'en avez besoin que dans tr code>, puisque vous ajoutez un terminateur null à la fin). P>
Vous n'allociez pas avant d'utiliser, vous utilisez puis em> alloué, mais également alloué de manière incorrecte. L'allocation correcte est la suivante: où C'est bon que vous écoutez vos avertissements de compilation, mais celui-ci était vraiment spécifique et que vous devriez pouvoir trouver le problème. La commande d'allocations est extrêmement importante et "assez proche" n'est pas acceptable. Cela fonctionne soit, soit un comportement indéfini. P> p> str code> est une matrice de char * code>, pas em> un tableau de Char CODE>. P>
for (size_t i = 0; i < n; ++i)
free(str[i]);
free(str);
Vous faites exactement ce qu'il dit que vous faites. Allouer
str code> avant d'utiliserstr [i] code>. Déplacez cette allocation d'allocation avant i> vous l'utilisez. Aussi NE PAS I> CASTMALLOC CODE>.Vous faites d'abord quelque chose comme
str [i] = malloc ... code> et sur la ligne ci-dessous, vous faites quelque chose commestr = (char * **) MALLOC (Tailleof (Char) * N + 1 ); code>NULL code> est un null pointeur i>. Ce n'est pas censé être utilisé pour d'autres valeurs. Si vous souhaitez initialiserCNT code> etk code> à zéro, utilisez zéro (0 code>).