Во-первых, ваши sizeofs неверны. T * = malloc (num * sizeof (T)) является правильным. Вы также можете использовать calloc.
Вы повторно используете b для разных целей, так что это довольно запутанно. Не очень хорошо, если использовать односимвольную переменную.
p-> таблица, которая была b выделена, но не инициализирована, то есть она не указывает на что-либо полезное, тогда вы пытаетесь разыменовать ее.
Вам нужно сначала заполнить указатели Entry *, и они должны указывать на действительные структуры Entry, если вы собираетесь разыменовать их.
Ваш процесс, вероятно, умирает в строке b> theData = NULL