分配值错误C

时间:2015-07-09 15:57:50

标签: c pointers hashtable

我是C的新手,我在使用指针和值时遇到了一些麻烦。

所以我正在创建一个哈希表,我的插入函数出错(错误在代码后发布):

typedef struct WordList {
   char *word;
   struct WordList *next;
} WordList;

typedef struct HashTable {
   int key;
   struct WordList *value;
   struct HashTable *next;
} HashTable;

#define TABLE_SIZE 8192

HashTable *table[TABLE_SIZE] = { NULL };

//Insert element
void insertElement(int key, char *word) {
   int i = 0;

   // check if key has already existed
   while((&(table[i]->key) != NULL) && (i < TABLE_SIZE)) {
      // !!!! ERROR HERE !!!! if(table[i]->key == key) { // if find key    
         // ... implementation

         return; // exit function and skip the rest
      }

      i++; // increment loop index 
   }

   // find a NULL slot and store key and value
   if(&(table[i]->key) == NULL) {
      // !!! ERROR HERE!!! table[i]->key = key;

      // ... implementation
   }
}

int main() {
   // test call
   insertElement(1, "blah\0");

   int i;

   for ( i=0; i < 10; i++)
   {
      printf("%d: ", i);

      struct HashTable *tableTemp = table[i];

      while (tableTemp != NULL)
      {
         printf("(%d)\n", tableTemp->key);
         tableTemp = tableTemp->next;
      }

      printf("\n");
   }

   return 0;
}

我使用valgrind,这是我对分配表[i] - &gt;的错误key = key

Invalid write of size 4
Address 0x0 is not stack'd, malloc'd or (recently) free'd

1 个答案:

答案 0 :(得分:1)

一般而言,地址public function setImgProfileAttribute($value) { $this->attributes['img_profile'] = '/private/var/tmp/phpceBMP2/'. $value; } 是空指针;你试图用空指针写一个4字节的值(可能是0x0) - 比如int,但它可能不是那么明显。

在您的骨架代码中,您有:

int *p = 0; *p = 1;

评论:

  1. 您应该已经显示了错误的实际代码。我们必须猜测,因为你没有表现出来。

  2. 您刚刚确认if (&(table[i]->key) == NULL) { // !!! ERROR HERE!!! table[i]->key = key; 的地址是空指针,当您尝试将table[i]->key分配给它时会导致问题。

    < / LI>

    将来,请提供足够的真实代码,我们可以看到您的MCVE(How to create a Minimal, Complete, and Verifiable Example?)或SSCCE(Short, Self-Contained, Correct Example) - 两个名称和相同基本想法的链接。