Нет, это не потому, что вы выделяете массив, принимая размер только 1 элемента типа примитива char (который составляет 1 байт).
Я предполагаю, что вы хотите выделить 5 указателей на строки внутри names
, но только указатели.
Вы должны выделить его в соответствии с размером указателя, умноженным на количество элементов:
char **names = malloc(sizeof(char*)*5);
Вам не нужно выделять их один за другим с помощью цикла. Обратите внимание, что вам нужно указать, что это указатель указателей, используя **