通过创建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));
}
但这一次我觉得我甚至不能创造这些桶。我正在使用编写代码,这是在C++中进行的。编译器给了我以下警告:
:警告C4305:“参数”:从“__int64”截断到“size_t”
警告C4309:‘参数’:截断常量值
我在网上查了一下,有人说这个数字太大了。这是我第一次在链表中处理这么大的数字。我是否需要修改任何东西来使这段代码再次工作?
谢谢。任何想法和帮助,我将不胜感激!
发布于 2012-03-13 07:32:32
我将您的代码转换为一个小示例程序:
#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 2010编译得很好。
我想到的是,您正在分配一个由100000个指针组成的数组(每个指针可能有4个字节)。这让我想起了旧编译器,它不会让您在每个变量(或函数)中使用超过64 of的堆栈空间。我记不起来了。它与或Turbo .有关。
因为这是C++,所以我建议首先不要使用原始C数组。相反,您可以将上面的代码替换为:
#include <vector>
struct node {
int i;
};
int main()
{
std::vector<node> bucket( 100000 );
}
在所有使用C数组的情况下,都可以使用std::vector
对象。
发布于 2012-03-13 07:26:17
问题可能是在循环条件下:
for (int i=0; i<100000; ++i)
^^^^^^^^^
您需要std::size_t i;
或unsigned long i;
来进行比较,直到100000
为止。
https://stackoverflow.com/questions/9679818
复制相似问题