Итак, у меня небольшая проблема. Я пытаюсь создать хеш-таблицу, но я все время получаю сообщение об ошибке «Возврат из несовместимого типа указателя». Я знаю, что это значит, но я не знаю, почему мой код не работает. Я ищу объяснение, почему мой код не работает. Почему он не распознает массив как указатель?Возвращение указателя на массив указателей на структуры
Я создаю массив указателей на структуры для хэш-таблицы. (Внешне прикован) (я знаю, что мой код, вероятно, действительно отстой> < Я все еще учусь!)
struct hashTBL {
char *userID;
char *password;
struct hashTBL *next;
};
typedef struct hashTBL Tbl;
typedef struct hashTBL* TblPTR;
TblPTR createHashTBL(int size)
{
char *userID;
char *password;
int i;
TblPTR hashArray[size];
FILE* fpData;
char *fileName = "encrypted.txt";
fpData = openReadFile(fileName);
TblPTR T = NULL;
while((fscanf(fpData, "%s", userID)) != EOF)
{
fscanf(fpData, "%s", password);
i = hash(userID, size);
if(hashArray[i] != NULL)
{
TblPTR H = hashArray[i];
while(H != NULL)
{
T = H;
H = H->next;
}
H = newPTR(userID, password, T);
}
else
{
hashArray[i] = newPTR(userID, password, T);
}
}
closeFile(fpData);
return &hashArray;
}
TblPTR newPTR(char *userID, char *password, TblPTR T)
{
TblPTR H = (TblPTR)malloc(sizeof(Tbl));
if(T != NULL) T->next = H;
H->userID = userID;
H->password = password;
H->next = NULL;
return H;
}
После быстрого просмотра код кажется действительным, хотя достаточно сложно обнаружить ошибки в коде, даже когда компиляторы _do_ сообщают вам, в какой строке он включен. На какой линии это не удается? – Neil
Просьба представить образец кода, который максимально приближен к компиляции, или указать, где произошла ошибка. Я предполагаю, что 'TblPTR' является typedef для' Tbl * ', но вы не указали определение' Tbl'. –
return statment «возврат из несовместимого типа указателя» «функция возвращает адрес локальной переменной» – Bri