Я делаю хэш-таблицу в C, ключи которой имеют тип char *. Я храню ключ в самой таблице по причинам, выходящим за рамки этой проблемы. Хэш-таблица работает по большей части, за исключением следующей проблемы: когда размер таблицы превышает 2112 элементов, и я пытаюсь инициализировать ключи как NULL-указатели, я сталкиваюсь с ошибкой сегментации.Ошибка сегментации при переходе по выделенной памяти
Вот определение Хеш:
typedef struct hash_table
{
uint32_t size; // # of elements the table can store
uint32_t count; // # of elements in the table
char **keys; // The pointer to the first key. Each key is a char*
int32_t *vals; // The pointer to the first val.
} hashTable;
и вот где я инициализировать таблицу с NULL указатели в качестве ключей:
// Declare the pointer to the hash table
hashTable *symbolTable = malloc(sizeof(hashTable));
// Set the hash table properties
symbolTable->size = 7699;
symbolTable->count = 0;
symbolTable->keys = malloc(sizeof(symbolTable->keys[0]) * symbolTable->size);
symbolTable->vals = malloc(sizeof(symbolTable->vals[0]) * symbolTable->size);
// Initialize the keys to be NULL pointers.
int i;
for (i = 0; i < symbolTable->size; i++)
{
char **cp = symbolTable->keys + i * sizeof(symbolTable->keys[0]);
*cp = NULL;
}
Когда я запускаю программу, я получаю сегментацию ошибка в цикле for, когда i == 2111.
Я относительно новичок в распределении динамической памяти в C и застрял в этой проблеме в течение некоторого времени. Если у кого-нибудь есть понимание или совет, я бы очень признателен.
Оба эти решения работали. Спасибо за помощь. –