gpt4 book ai didi

c - 马尔可夫链(Windows 上的 C 代码失败)

转载 作者:行者123 更新时间:2023-11-30 19:38:18 25 4
gpt4 key购买 nike

我正在尝试从 Kernighan 的书《在我的工作站上进行编程的实践》(Windows 7 + vs2015 社区版)中获取这段代码

我收到一个奇怪的错误。

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;
}
}
}

for (suf = sp->suf; suf != NULL; suf = suf->next)

Unhandled exception at 0x000000013F5C1564 in CompareCandCsharp.exe: 0xC0000005: Access violation reading location 0x0000000000000010.

我的实现类似于此处描述的 - Working with arrays and reading text files

似乎算法有效 - 但在我的计算机上它失败了。我找不到正念的目的。请您提出建议。

最佳答案

经过几个小时的调试,我发现预期的方法有一个小错误。

  for (suf = sp->suf; suf != NULL; suf = suf->next) {
if (rand() % ++nmatch == 0) {
w = suf->word;
}

这一行中的 if 后面没有括号,因此方法中的所有其他代码都会多次尝试设置 w,当然这会导致内存错误 =)。感谢您在阅读之前删除我的问题 =))

关于c - 马尔可夫链(Windows 上的 C 代码失败),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38390830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com