gpt4 book ai didi

c++ - 在 C++ 中将结构指针设置为 null 时存储的值消失

转载 作者:太空狗 更新时间:2023-10-29 21:07:08 25 4
gpt4 key购买 nike

我正在编写一个 C++ 应用程序来在大型歌词数据库中进行单词搜索。首先,我将每个单词放入一个如下所示的 Word 结构中:

struct Word{
char* clean;
int size;
int position;
SongId id;
Word* same;
Word* diff;
};

我有一个执行以下操作的“makeNode”函数:

  1. 记下每个单词
  2. 创建一个新的 Word 结构并将单词添加到其中
  3. 创建一个名为 node 的 Word* 指向新单词
  4. 将指针存储在哈希表中。

在我的 makeNode 函数中,我将 node->clean 设置为我的“干净”一词。我可以通过 cout'ing node->clean 来打印这个词。但是当我将 node->same 设置为 NULL 时,我失去了 node->clean。我不会丢失 node->position 或 node->size。如果我删除将 node->same 分配给 NULL 的行,我不会丢失 node->clean。

char* clean = cleanse(word);
Word* node = new Word;
node->size = strlen(word);
node->clean = clean;
cout<<"MADE NODE FOR "<<node->clean<<endl;
node->position = position;
cout<<"4 node clean: "<<node->clean<<endl;
node->id = id;
cout<<"5 node clean: "<<node->clean<<endl;
node->same = NULL;
cout<<"6 node clean: "<<node->clean<<endl;
cout<<"node position: "<<node->position<<endl;
cout<<"node size: "<<node->size<<endl;
node->diff = NULL;

产生以下输出:

MADE NODE FOR again
4 node clean: again
5 node clean: again
6 node clean:
node position: 1739
node size: 6
0 node clean:
1 node clean:
3 node clean:

谁能帮我解决这个错误?如果您需要更多信息,请告诉我。提前致谢!

编辑:这里是清理函数。

char* SongSearch::cleanse(char* dirty)
{

string clean;
int iter = 0;
while (!isalnum(dirty[iter]))
{
iter++;
}
while(dirty[iter]!='\0')
{
clean += dirty[iter];
iter++;
}

int backiter = clean.length() - 1;
while(!isalnum(clean[backiter]))
{
clean.erase(backiter, 1);
backiter--;
}


char c;
for (int i = 0; i<clean.length(); i++)
{
c = tolower(clean[i]);
clean[i] = c;
}

char* toReturn = (char*)(clean.c_str());
return toReturn;
}

最佳答案

问题可能是在 cleanse 中,您返回了 clean.c_str()

clean 不复存在时,即函数退出时,该指针值不再有效。它不再保证指向任何东西,因此您能按预期“再次”看到该字符串纯属幸运。

我怀疑发生的事情是 曾经cleanse 中的字符串 clean 的数据占用的内存,已经被重新-用于结构word,但不会立即被覆盖。碰巧的是,用于保存第一个 a 的字节现在保存了结构的 same 成员的一部分。因此,当您向 node->same 写入一个空指针时,它具有将 0 字节写入 node->clean 指向的位置的效果。此后,它似乎指向一个空字符串。

关于c++ - 在 C++ 中将结构指针设置为 null 时存储的值消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850257/

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