This produces an incompatibility warning:
#include <stdlib.h>
#include <stdio.h>
typedef struct
{
  int key;
  int data;
  struct htData_* next;
  struct htData_* prev;
}htData_;
typedef struct
{
  int num_entries;
  struct htData_** entries;
}ht_;
ht_* new_ht(int num_entries);
int ht_add(ht_* ht_p, int key, int data);
int main()
{
  int num_entries = 20;
  //crate a hash table and corresponding reference                                                                                                              
  ht_* ht_p = new_ht(num_entries);
  //add data to the hash table                                                                                                                                  
  int key = 1305;
  ht_add(ht_p,key%num_entries,20);
  return 0;
}
ht_* new_ht(int num_entries)
{
  ht_ *ht_p;
  ht_ ht;
  ht.num_entries = num_entries;
  ht_p = &ht;
  //create an array of htData                                                                                                                                   
  htData_ *htDataArray;
  htDataArray = (htData_*) malloc(num_entries * sizeof(htData_));
  //point to the pointer that points to the first element in the array                                                                                          
  ht.entries = &htDataArray; // WARNING HERE!!!!!!!!!!!!!!!!
  return ht_p;
}
I'm trying to copy the **ptr to the struct containing a **ptr.
Update: My simplified code was not accurate so I've posted the actual code.
 
     
     
     
    