指针数组" Use of uninitialised value"错误

" Use of uninitialised value" error with an array of pointers

本文关键字:value 错误 uninitialised Use 数组 指针 of      更新时间:2023-10-16

我需要构建一个哈希表,但我会从valgrind the Orror中获得"使用尺寸8的非直接值8"的数组,该数组应该在代码中初始化的数组(如您所知)请参阅Hashtable的构造函数)。

这是班级魔术师:

 class Magician{
  public:
  int magiID;
  Magician(int id) : magiID(id) {}
 };

这是hashtable的类:

 class HashTable {
 public:
   int k;//total size of the array
   int mod;
   Magician **array;
   HashTable(int k): k(k) {
     array = new Magician *[k];
     for(int i = 0; i<k; k++) array[i] = NULL; //Initialization of the array
     int mod(k);
     while ((mod%10 == 0)||(mod%2 == 0)) {
       mod--;
     }
     if(mod <= 1) mod = 2;
   }
 ~HashTable(){
   delete[] array;
 }
 int reHash(int x, int i){
   return (x%mod + i);
 }
 void insertElement(Magician* m){
   int id = m->magiID;
   int j = 0;
   while(array[reHash(id, j)%k] != NULL){ //Use of uninitialised value of size 8
      j++;
   }
   array[reHash(id, j)%k] = m; //Use of uninitialised value of size 8
 }
};

有问题的行(方法插件中的)是试图在数组中达到某些东西的线条。我的初始化不好吗?如果是,那为什么?

magiID中的一个可能的罪魁祸首是负值。请注意,定义了C和C %操作员,以便(a / b * b) + (a % b) == a。如果a为负,并且b为正,则结果为负,您可以在数组开始之前索引。

相关文章: