Выделение в стеке символьного массива вызывает ошибку сегментации, а выделение кучи - нет - PullRequest
0 голосов
/ 26 октября 2018

Я новичок в программировании и удивляюсь, почему у меня возникает ошибка сегментации, когда я объявляю массив символов в стеке, а не когда я делаю это в куче. это потерпит неудачу.

Ниже приводится ошибка сегментации в memset

char space[(2*len + 1) * cnt];
memset(space, 0, (2*len + 1) * cnt);

ниже работает нормально

char *space = (char *)malloc((2*len + 1) * cnt);
memset(space, 0, (2*len + 1) * cnt);

В моем случае len = 999 и cnt = 9999. Я предполагаю, что большое выделение памяти может быть причиной, вызванной возможной фрагментацией стека?

1 Ответ

0 голосов
/ 26 октября 2018

Вы работаете на небольшой платформе, где доступное пространство стека меньше (2 * 999 + 1) * 9999 = 19 988 001 байт? Или, возможно, ваш компилятор по умолчанию имеет стек меньше этого? Например, этот поток говорит, что размер стека Visual Studio по умолчанию составляет всего 1 МБ: C / C ++ максимальный размер стека программы .

...