В чем разница между определением массива длины, который определяется до времени выполнения (зависит от аргументов командной строки) с помощью array[size]
и использованием malloc()
? array[i]
приводит к тому, что данные помещаются в стек, malloc()
использует кучу [см. Этот стековый поток]
Так что с большими данными я могу столкнуться со стековыми потоками, но на новой машине в общей сложности 30 char
с и int
с не должны быть проблематичными c ( Стек составляет около 1 МБ на windows в соответствии с этим ).
Так что я, вероятно, упускает что-то очевидное.
Насколько я понимаю, при определении в main()
оба должны быть одинаковыми:
Пример 1
int size; // depends on some logic
char array[size];
Пример 2
int size; // depends on some logic
array= (char *)malloc(size * sizeof(char));
free(array); // later after use
Но когда я использую массив внутри функций и передаю его как указатель (func(char* array)
) или как массив (funct(char array[])
) иногда gdb-debugger дает мне знать, что функция получает поврежденные данные в # 1, используя malloc()
, исправила проблему.
Is array[i]
, не рекомендуется использовать, когда она не определяется при компиляции время? Это какая-то ограниченная проблема? Этот ответ содержит комментарий, предлагающий такую вещь, но я не совсем понимаю, применимо ли это здесь.
Я использую C99.