gpt4 book ai didi

c - while 循环中奇怪的指针行为

转载 作者:行者123 更新时间:2023-11-30 15:42:29 27 4
gpt4 key购买 nike

您好,我将一些值插入到哈希表中(实现的哈希表经过了良好的测试并且有效)我使用 fscanf 读取文件并将字符串和 float 的值存储在变量中。

文本文件如下所示:

die 0.000000
laun -4.102468
des -7.952615
verliebt -6.080813
ein -8.645762
schaferspiel -4.315029
in -8.645762
vers -5.755391
und -8.645762
akt -3.909564
person -8.645762
egl -8.645762

读取工作如下:

//scan text for scheme WORDSTEM PROBABLITIY
r = fscanf(text, "%s %f\n", wordstem, &prob);
//doing some pointer madness!!!
pProb = &prob;
float PpProb = *pProb;
float *PPpProb = &PpProb;
char *cpStr = strdup(wordstem);
hashtable_access(wordHash, cpStr,PPpProb); //insert into hashtable_t
while (r != EOF){
float prob1;
r = fscanf(text, "%s %f\n", wordstem, &prob1);
//printf("%f",prob1);
char *cpStr1 = strdup(wordstem);
float a = 0;
float *PpProb1 = &a;
float *pProb1 = &prob1;
*PpProb1 = *pProb1;
hashtable_access(wordHash, cpStr1,PpProb1);
pProb1 = NULL;
//do till EOF
}
float *pHashProb = (float *)hashtable_access(wordHash, "schaferspiel", NULL);
float hashProb = *pHashProb;
printf("%f\n",hashProb);

问题在于,哈希为第一个条目“die”返回正确的值,但 schaferspiel 和第一个条目之后的所有其他键始终返回最后一个值。

哈希表需要保存指针。我不确定我做错了什么,因为我认为我复制了 prob1 的值。

有人可以帮助我吗?

最佳答案

您的代码存在一些问题(例如,我不明白为什么您要在循环之前执行一次插入,而其余部分则在循环中执行),但我认为主要问题是您使用的是相同的哈希表中一遍又一遍地指向 float 。尝试这样的事情:

float prob;
float *probCopy;

//scan text for scheme WORDSTEM PROBABLITIY
r = fscanf(text, "%s %f\n", wordstem, &prob);
probCopy = (float*)malloc(sizeof(float));
*probCopy = prob;
char *cpStr = strdup(wordstem);
hashtable_access(wordHash, cpStr, probCopy); //insert into hashtable_t
while (r != EOF) {
float prob1;
r = fscanf(text, "%s %f\n", wordstem, &prob1);
probCopy = (float*)malloc(sizeof(float));
*probCopy = prob1;
char *cpStr1 = strdup(wordstem);
hashtable_access(wordHash, cpStr1, probCopy);
//do till EOF
}
float *pHashProb = (float *)hashtable_access(wordHash, "schaferspiel", NULL);
float hashProb = *pHashProb;
printf("%f\n",hashProb);

注意:您应该意识到,放入哈希表中的所有内容都可能会“泄漏”,除非哈希表清理其元素指向的内存(或者您自己在其他地方明确执行此操作)。

关于c - while 循环中奇怪的指针行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20155308/

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