从';截断链表的大小__int64';至';尺寸 我成功地通过创建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)); } struct节点{ 结构节点*下一步; 长期价值; }; 结构节点*bucket[10]; 对于(int i=0;i

从';截断链表的大小__int64';至';尺寸 我成功地通过创建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)); } struct节点{ 结构节点*下一步; 长期价值; }; 结构节点*bucket[10]; 对于(int i=0;i,c++,linked-list,size-t,C++,Linked List,Size T,而言,问题可能在于循环条件: for (int i=0; i<100000; ++i) ^^^^^^^^^ for(int i=0;i可能是循环条件下的问题: for (int i=0; i<100000; ++i) ^^^^^^^^^ for(int i=0;i我将您的代码转换为一个小示例程序: #include <stdlib.h> struct node { int i; }; int main

而言,问题可能在于循环条件:

for (int i=0; i<100000; ++i)
              ^^^^^^^^^
for(int i=0;i可能是循环条件下的问题:

for (int i=0; i<100000; ++i)
              ^^^^^^^^^

for(int i=0;i我将您的代码转换为一个小示例程序:

#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));
    }
}
#包括
结构节点{
int i;
};
int main()
{
结构节点*bucket[100000];

对于(int i=0;i我将您的代码转换为一个小示例程序:

#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));
    }
}
#包括
结构节点{
int i;
};
int main()
{
结构节点*bucket[100000];

对于(int i=0;iI无法在VS2010中再现这两个警告。我尝试了x86和x64。我只是尝试调试它,它给了我“list.exe中0x00301e77处的未处理异常:0xC00000FD:Stack overflow”。这是预期的,因为
struct node*bucket[100000];
太大,无法放在堆栈上。但是警告令人费解。哪个版本的Visual Studio,x86或x64,还有其他特殊的项目设置?我使用的是Visual Studio 2010,并且运行的是64位。我无法在VS2010中复制这两个警告。我尝试了x86和x64。我只是尝试调试它,它给了我一个错误“list.exe中0x00301e77处未处理的异常:0xC00000FD:堆栈溢出。”这是预期的,因为
struct node*bucket[100000]
太大,无法放在堆栈上。但警告令人费解。哪个版本的Visual Studio,x86或x64,还有其他特殊项目设置?我使用的是Visual Studio 2010,运行的是64位。我认为这不太可能;这意味着
int
的宽度为16位。确实,它至少需要16位,但我认为n实际上,除了64位机器(仍然是32位)之外,它每台机器都有一个“本机”大小。我认为这是极不可能的;这意味着
int
是16位宽的。的确,它至少需要16位,但实际上除了64位机器(仍然是32位)之外,它每台机器都有一个“本机”大小.对于std::vector,如果我定义了多个此大小的向量(如6),是否也会存在溢出?@LearnMore:No。每个向量只占用几个字节(可能16字节用于您,8字节用于数据指针,8字节用于大小计数器)在堆栈上;100000个结构被分配到不同的内存区域。对于std::vector,如果我定义多个这样大小的向量(如6),是否也会存在溢出?@LearnMore:No。每个向量只占用几个字节(可能16个字节,8个字节用于数据指针,8个字节用于大小计数器)在堆栈上;100000个结构被分配到不同的内存区域。