Усечение размера связанного списка с «__int64» до «size_t».

StackOverflow https://stackoverflow.com//questions/9679818

  •  13-12-2019
  •  | 
  •  

Вопрос

Я успешно написал код C++ для поразрядной сортировки, создав 10 сегментов.Для 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++.Компилятор выдал мне следующие предупреждения:

:предупреждение C4305:«аргумент»:усечение с «__int64» на «size_t»

:предупреждение C4309:«аргумент»:усечение постоянного значения

Я поискал в инете, кто-то говорит, что число слишком велико.Впервые я обрабатываю такое большое количество в связанном списке.Нужно ли мне что-то изменить, чтобы этот код снова заработал?

Спасибо.Любые идеи и помощь буду признательна!

Это было полезно?

Решение

Я включил свой код в небольшой образец программы:

#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 байта каждый).Это напоминает мне о старых компилятора, которые не позволят вам использовать более 64 КБ пространства стека на переменную (или функцию? Я не могу вспомнить. Это было с Turbo Pascal или Turbo C ...).

Поскольку это C ++, я предлагаю просто не использовать Roar C Array в первую очередь.Вместо этого вы можете заменить вышеуказанный код:

#include <vector>

struct node {
    int i;
};

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

Объект std::vector можно использовать во всех случаях, когда вы используете A массива C.

Другие советы

Вероятно проблема в условии цикла:

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

Тебе нужно иметь std::size_t i; или unsigned long i; сравнивать до 100000.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top