tarafından oluşturulan, bu yüzden küresel olması gerekiyor ve benim başlık dosyaları birinde bunu beyan edilmiştirBaşlatılmamış değer bir karma tablosu kullanılarak kelimelik bir sözlük uygulamak çalışıyorum bir yığın ayırma
extern node** dictionary;
düğüm fonksiyonları bir sözlük bildirimi içeren başlığını da tanımlandığı gibi olduğu bir dosyada
typedef struct node
{
char* word;
struct node* next;
} node;
O ve
ayrıca en
node** dictionary;
eklenecek
Sonra aslında sözlüğü ilk karma tablosunu yapacak bağlantılı listeler için bellek ayrılamadı yükleyen işlevinde
bool load(const char* dict_file)
{
dictionary = malloc(sizeof(node*) * LISTS);
FILE* dict = fopen(dict_file, "r");
if(dict == NULL)
return false;
char buffer[MAX_LEN + 2];
size_dict = 0;
while(fgets(buffer, MAX_LEN + 2, dict) != NULL)
{
node* new_node = malloc(sizeof(node));
int len = strlen(buffer);
new_node->word = malloc(sizeof(char) * (len));
//avoid \n
for(int i = 0; i < len - 1; i++)
new_node->word[i] = buffer[i];
new_node->word[len - 1] = '\0';
new_node->next = NULL;
int index = hash(buffer);
new_node->next = dictionary[index];
dictionary[index] = new_node;
size_dict++;
}
if (ferror(dict))
{
fclose(dict);
return false;
}
fclose(dict);
return true;
}
Yani programı dizeleri ve düğümleri için ince, o zaman serbest ayrılmış tüm belleği işleri ve valgrind (bellek sızıntılarını algılayan bir hata ayıklayıcısını çalıştırdığımda) bellek sızıntısının mümkün olmadığını söylüyor, ancak bir hata olduğunu söylüyor. bir yığın ayırma tarafından yaratılmamış değer oluşturuldu ve beni bu tam satıra yönlendiriyor dictionary
için bellek ayırma, yukarıda yazdığım yükleme işlevinin ilk satırı.
Neyi yanlış yapıyorum? Küresel olarak dictionary
kullanmamın yanlış olduğunu tahmin ediyorum, bu yüzden herkes bunu küresel olarak tutmanın başka bir yolunu önerebilir ve bu hatayı önleyebilir mi?
Gösterilen kod, hatayı yeniden üretmiyor, bu nedenle büyük olasılıkla bize göstermediğiniz başka bir şeyden kaynaklanıyordur. – Rufflewind
Ama bunu sadece bu satıra gönderdiğim için yaptım, şu kod sadece bir dosya okuyor, kelimeye göre bir sözcük, her bir kelime için bir düğüm oluşturuluyor ve ilgili düğüm listesindeki her düğümün seçimi (bunlardan 26 tanesi) Düğüm nereye gittiyse, bu harfin ilk harfine göre değişir. –
Sorun kodun geri kalanında, neden yayınlamamanın özel bir sebebi? Sana yardım etmeye çalışıyorum ama kodun geri kalanı gerekiyor. –