В то время, когда вы делаете это:
*orderedIds = (char *) malloc(variableNumberOfElements * sizeof (char*));
orderedIds
не инициализируется, поэтому его значение равно неопределено . Затем вы пытаетесь разыменовать это неопределенное значение. Это вызывает неопределенное поведение .
Вы хотите назначить orderedIds
напрямую:
orderedIds = malloc(variableNumberOfElements * sizeof (char*));
Затем вы можете дополнительно назначить память, выделенную malloc, для элементов выделенного вами массива.
У вас похожая проблема с free
:
free(*orderedIds);
*orderedIds
- это то же самое, что orderedIds[0]
, который вы уже освободили, так что это двойное освобождение. Это также вызывает неопределенное поведение. Вместо этого вы должны иметь:
free(orderedIds);