gpt4 book ai didi

c++ - 将链表的大小从 '__int64' 截断到 'size_t

转载 作者:搜寻专家 更新时间:2023-10-31 01:15:49 27 4
gpt4 key购买 nike

我通过创建 10 个桶成功地编写了用于基数排序的 C++ 代码。对于 10 个桶,我是这样创建的:

struct node{
struct node* next;
long value;
};

struct node*bucket[10];

for (int i=0; i<10; ++i) {
bucket[i] = (struct node *) malloc (1000000*sizeof(struct node));
}

而且做得很完美。

但现在我需要将桶的数量增加到 100000。我尝试修改这些桶的大小,例如:

struct node*bucket[100000];

for (int i=0; i<100000; ++i) {
bucket[i] = (struct node *) malloc (1000000*sizeof(struct node));
}

但这次我想我什至不能创建那些桶。我正在使用 Visual Studio 进行编码,这是在 C++ 中。编译器给了我这些警告:

: warning C4305: 'argument' : truncation from '__int64' to 'size_t'

: warning C4309: 'argument' : truncation of constant value

我在网上查了一下,有人说这个数字太大了。这是我第一次在链表中处理这么大的数。我是否需要修改任何内容才能使此代码再次运行?

谢谢。任何想法和帮助我将不胜感激!

最佳答案

我把你的代码变成了一个小示例程序:

#include <stdlib.h>

struct node {
int i;
};

int main()
{
struct node*bucket[100000];

for (int i=0; i<100000; ++i) {
bucket[i] = (struct node *) malloc (1000000*sizeof(struct node));
}
}

这可以很好地与 Visual Studio 2010 一起编译。

我想到的是您正在分配一个包含 100000 个指针的数组(每个指针可能有 4 个字节)。它让我想起旧的编译器,它们不允许每个变量(或函数)使用超过 64kB 的堆栈空间?我不记得了。它是使用 Turbo Pascal 或 Turbo C...)。

由于这是 C++,我建议首先不要使用原始 C 数组。相反,您可以将上面的代码替换为:

#include <vector>

struct node {
int i;
};

int main()
{
std::vector<node> bucket( 100000 );
}

std::vector 对象可用于所有使用 C 数组的情况。

关于c++ - 将链表的大小从 '__int64' 截断到 'size_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9679818/

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