对哈希表插入元素时,对重复插入的元素的地址溢出是怎么回事?

问题遇到的现象和发生背景

c语言编写哈希表的的简单应用(开放地址法)

// 哈希表查找关键字
int searchHash(HashTable *hash, int key, int address)
{
    address = hashFun(key); // 求哈希地址
    while (hash->elem[address] != key) // 否则,使用开放定址法继续查找
    {
        address = (address + 1) % m; // 开放定址法的线性探测
        if(address>=m)address = 0;
             
        // 如果 查找到NULLKEY | 循环回到原点,则说明关键字不存在,返回FALSE      
          if(hash->elem[address] == NULLKEY || address ==hashFun(key)) 
            printf("查找关键字 %d 失败!\n", key);
            return 0; //查找失败
    }
     hash->elem[address] = key;
    printf("查找关键字%d成功!其哈希地址为 %d \n",key,address);
    return 1;//查找成功
}

// 插入关键字进哈希表
void insertHash(HashTable *hash, int key,int address)
{
    
    if(searchHash(hash, key,address) == 1)//查找数据成功,显示地址 
    {
        printf("已有该关键字!"); 
        printf("关键字%d的哈希地址为 %d \n",key,address);//问题处
            
        
    }
    else 
    {
        address = hashFun(key); // 求直接哈希地址
    
        while (hash->elem[address] != NULLKEY) // 如果不为空,则冲突
        {
        /*    if(hash->elem[address] == key)
            {
                printf("已有该关键字!"); 
                printf("关键字%d的哈希地址为 %d \n",key,address);
                return 0;
            }
        */
            address = (address + 1) % m; // 开放定址法的线性探测
        }
            hash->elem[address] = key; // 直到有空位后插入关键字
            printf("插入成功!关键字%d的哈希地址为 %d \n",key,address);
                 
    } 
       
}


遇到的问题如图

img

img

img

img