Je suis en train de faire le travail ce morceau de code du livre de Kernighan La pratique de la programmation sur mon poste de travail (Windows Community Edition 7 + de vs2015)chaîne de Markov (code c sur Windows échoue)
je reçois une erreur étrange.
void generate(int nwords) {
State *sp;
Suffix *suf;
char *prefix[NPREF];
char *w = NULL;
int i, nmatch;
for (i = 0; i < NPREF; i++)
prefix[i] = NONWORD;
for (i = 0; i < nwords; i++) {
sp = lookup(prefix, 0);
nmatch = 0;
for (suf = sp->suf; suf != NULL; suf = suf->next) {
if (rand() % ++nmatch == 0) {
w = suf->word;
}
if (nmatch == 0)
printf("internal error: no suffix %d %s", i, prefix[0]);
if (strcmp(w, NONWORD) == 0)
break;
printf("%s ", w);
memmove(prefix, prefix + 1, (NPREF - 1) * sizeof(prefix[0]));
prefix[NPREF - 1] = w;
}
}
}
pour
exception non gérée à 0x000000013F5C1564 dans CompareCandCsharp.exe (SUF = sp-> suf;; suf = NULL suf = suf-> suivante!): 0xC0000005: violation d'accès emplacement de lecture 0x0000000000000010.
Ma mise en œuvre est similaire à décrit ici - Working with arrays and reading text files
Semble algorithme fonctionne - mais sur mon ordinateur, il échoue. Je ne peux pas trouver intentionnel pour cela. Pourriez-vous s'il vous plaît donner vos suggestions.
Comment savez-vous 'lookup()' renvoie un pointeur non-NULL? –
Etes-vous sûr que 'lookup' renvoie un pointeur non nul? Si vous exécutez un débogueur et laissez-le attraper le crash (que vous devriez toujours faire btw) quelle est la valeur de 'sp'? Etes-vous sûr que le crash est à cette déclaration de boucle for for? –
Je ne suis pas si cool dans c (et c sur windows est sous mon esprit) = (ma langue de base est C# Bien sûr, il peut retourner null pointeur mais l'implémentation de base du script ne fait rien pour le vérifier. parce que le débogueur reste là après l'erreur Peut-être que je le vérifierais sur linux = ( –