Вы используете malloc
фиктивно, но, поскольку числа работают правильно, ошибка, скорее всего, не будет обнаружена.Эта строка:
char ** commonSequence = (char**) malloc(1 * sizeof (char**));
должна выглядеть следующим образом:
char ** commonSequence = malloc(1 * sizeof (char*));
или предпочтительно:
char ** commonSequence = malloc(1 * sizeof *commonSequence);
Окончательная форма является самой хорошей, поскольку она не требует каких-либо изменений, есливы меняете тип commonSequence
.Что касается фактической проблемы с исходной строкой, вам нужно выделить ее в зависимости от размера объекта, на который вы будете указывать, а не от размера указателя, который на него указывает.На практике, поскольку оба указателя являются одинаковыми по размеру на современных машинах реального мира, но это все еще серьезная концептуальная ошибка, которая может укусить вас, когда вы применяете неправильный шаблон к типам без указателей.Например, это может привести к повреждению памяти / неопределенному поведению:
struct foobar *foo = malloc(1 * sizeof (struct foobar *));
, поскольку вместо размера структуры будет выделяться только 4 или 8 байтов.