首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将链接列表的大小从“__int64”截断到“size_t”

将链接列表的大小从“__int64”截断到“size_t”
EN

Stack Overflow用户
提问于 2012-03-13 07:21:14
回答 2查看 1.3K关注 0票数 2

通过创建10个桶,我成功地为基排序编写了一个C++代码。对于这10个桶,我以这样的方式创建它们:

代码语言:javascript
运行
复制
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桶。我试着修改这些水桶的大小,比如:

代码语言:javascript
运行
复制
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:‘参数’:截断常量值

我在网上查了一下,有人说这个数字太大了。这是我第一次在链表中处理这么大的数字。我是否需要修改任何东西来使这段代码再次工作?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-13 07:32:32

我将您的代码转换为一个小示例程序:

代码语言:javascript
运行
复制
#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数组。相反,您可以将上面的代码替换为:

代码语言:javascript
运行
复制
#include <vector>

struct node {
    int i;
};

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

在所有使用C数组的情况下,都可以使用std::vector对象。

票数 5
EN

Stack Overflow用户

发布于 2012-03-13 07:26:17

问题可能是在循环条件下:

代码语言:javascript
运行
复制
for (int i=0; i<100000; ++i)
              ^^^^^^^^^

您需要std::size_t i;unsigned long i;来进行比较,直到100000为止。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9679818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档