我在C中实现了一些有趣的数据结构,并将其速度与我实现的其他数据结构进行了比较。这是一个封闭寻址哈希表。
这是我用来创建节点的代码
hashNode *createNewNode(int data) {
hashNode *node = calloc(1, sizeof(hashNode));
node->data.key = data;
node->isSet = true;
node->next = NULL;
}
这是我想要计时的功能。
for (int i = 0; i < 5; i++) {
hashNode *node = createNewNode(arr[i]);
InsertNode(node, map);
}
(arr只是被打乱的前5000个数字)
正如您可能已经注意到的那样,创建节点的函数没有返回值,尽管如此,节点还是正确初始化了,并且插入了表中应该包含的所有数字,而且只有这些数字。这怎么会发生?
这个gimmik只在VS代码中工作,我尝试在Visual Studio中运行它,但它(正确地)没有初始化节点。有人知道发生了什么吗?
编辑:好吧,我可能没有正确表达自己,对不起。我的问题是,它是如何工作的?我知道这是一种未定义的行为,但它看起来不像是应该工作的东西,但它在5000次中正确工作了5000次,即使我在这里和那里打印一些,它也能正常工作