Я строил эту функцию хеш-таблицы, которой задан массив, из которого он получает слово, и указатель на массив, который он заполняет моей связанной структурой списков. Он правильно компилируется, но я получаю ошибку сегментации при - * hashTable [hashVal] = * newNode; ,C: Помогите понять указатели
void hashTableCreate(char *array, list *hashTable[]) {
while(arrayPos < getArrayLength(array)) {
char *temp = getWord(array);
int hashVal = hashingFunc(temp);
if((*hashTable[hashVal]).word == temp) {
(*hashTable[hashVal]).count = (*hashTable[hashVal]).count+1;
}
else {
list *newNode = malloc(sizeof(list));
strcpy(newNode->word,temp);
newNode->count = 1;
*hashTable[hashVal] = *newNode;
}
}
}
Это называется так:
void timeStructures(char *newArray) {
list *hashTable[3000];
hashTableCreate(newArray, hashTable);
}
Я знаю, что это делать с тем, как я использую мои указатели, но я не могу понять это. Любая помощь будет оценена по достоинству.
Вы хотите 'hashTable [hashVal] = newNode'. То, что у вас есть, '* hashTable [hashVal]', неверно, потому что оно вызывает «hashTable [hashVal]», но ни одна из ваших записей массива не инициализируется. Фактически, вам нужно запустить свой 'hashTable', чтобы все его записи были NULL, чтобы вы могли проверить это, а не разыменовывать любые записи NULL. В настоящий момент ваш код получает доступ к недопустимой памяти по всему месту. – kaylum