Member 13995616 Ответов: 2

Ошибка сегментации с большим размером массива. Почему?


struct person
{
char name[100];
int freq ;
} ;


Я создаю массив структуры person и использую этот массив в качестве хэш-таблицы.

int capacity;
struct person table[capacity] ;


Я вставляю имя строки, читая csv-файл, который имеет имя в каждой своей строке.

Когда я принимаю емкость таблицы около 50000 или более, возникает ошибка сегментации.

Когда я беру небольшую емкость, как 5000, все работает нормально.

Что делать, если в моем файле есть около 60000 различных имен, как я буду хранить их сейчас ?

Я не понимаю, почему это происходит? Может быть, это из-за моей хэш-функции?

Я использую линейное зондирование для поиска хэш-значения.

Я в замешательстве. Пожалуйста помочь.

Что я уже пробовал:

Я сделал код в IDE Netbeans.

CPallini

Вы должны использовать отладчик, чтобы узнать нарушающий код. И, возможно, сообщить об этом здесь.

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Ошибка сегментации с большим размером массива. Почему?

Поскольку память не бесконечна, модель памяти, используемая с вашим компилятором C, имеет предел, и ОС также дает ограниченную долю памяти, если вы не говорите ОС, что вам нужно больше.
Для получения более подробной информации вам нужно сообщить нам :
- Что такое ваш компилятор Си
- Какая модель памяти используется в вашем проекте
- Доброе приложение генерируется
- Какая ОС

Совет: подумайте об использовании некоторой базы данных, когда у вас есть большой объем данных.


Рейтинг:
0

k5054

Вы пытаетесь динамически регулировать размер вашего компьютера? table переменная? например, что-то вроде

int get_int(void);    // read an int from the user - not a standard function!

int capacity;
struct person table[capacity];

// more code here ...

capacity = get_int();

for(int i = 0; i < 500; i++)
{
   // do something with table
}


Если это так, то то, что у вас есть, не будет работать. Когда код компилируется, размер табличной переменной фиксируется, когда она

Вам нужно изучить динамическое распределение памяти. Видеть malloc() и друзья.