Вы берете размер двух указателей и делите один на другой,
size_t l = sizeof(a_struct) / sizeof(struct mystruct*);
a_struct
объявлен как struct mystruct **a_struct
, так что это то же самое, что сказать
size_t l = sizeof(struct mystruct **) / sizeof(struct mystruct*);
, поскольку все указатели имеют одинаковый размер, ** такой же размер, как и *, поэтому всегда будет иметь значение 1.
Я не совсем уверен, что вы пытаетесь распечатать здесь, размер a_struct
? или общий размер выделения? Размер a_struct
равен просто c.total
, общее выделение - это сумма всех значений, которые вы передали malloc.