Усечение размера связанного списка с «__int64» до «size_t».
-
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
.