LINUX.ORG.RU

Си почему нельзя выделять большой многомерный массив в GCC

 


0

1

gcc 9.2.0

такой код падает (при запуске)

int w=1200;
int h=1200;
unsigned char array[w][h][2];

такой не падает

int w=1200;
int h=1200;
unsigned char *array;
array=(unsigned char*) malloc(2*w*h);
free(array);

я чтото фундаментальное упустил/забыл? В спеках Си какието ограничения на размер массива есть? В других компиляторах и другой версии GCC работает (но нужна именно эта версия для сборки)

Ответ на: комментарий от Legioner

А Microsoft прямо сказал что не будет реализовывать VLA так как это говно небезопасное.

Это фича вообще опциональная в компиляторе С. То есть любой компилятор вправе её неподдерживать, и он всё равно будет соотвествовать стандарту.

anonymous
()
Ответ на: комментарий от anonymous

Это фича вообще опциональная в компиляторе С. То есть любой компилятор вправе её неподдерживать, и он всё равно будет соотвествовать стандарту.

Я не знаю, опциональная ли она, но gcc её поддерживает, а значит она должна работать как положено.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Я не знаю, опциональная ли она, но gcc её поддерживает, а значит она должна работать как положено.

 Feature test macros for optional features
__STDC_NO_VLA__
    Indicates variable length arrays and variably modified types are not supported. 

https://en.cppreference.com/w/c/11

anonymous
()
Ответ на: комментарий от anonymous

Это фича вообще опциональная в компиляторе С

А их вообще-то из последних стандартов не выпилили нахрен? Или я с чем-то путаю?

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

А их вообще-то из последних стандартов не выпилили нахрен? Или я с чем-то путаю?

Он был кандидат на включение в С++14. Но комитет в итоге отклонил предложение.

Из стандарта С вроде не собираются убирать. Но и не советуют использовать.

И вот мнение Линуса по этому поводу:https://lkml.org/lkml/2018/3/7/621

fsb4000 ★★★★★
()
Ответ на: комментарий от anonymous

Какое отношение маздайка и маздайский дерьмокомпилятор имеет к си? Это дерьмо для рабов и даже в стандартный сишный огрызок оно никогда не умело и не умеет.

Это фича вообще опциональная в компиляторе С. То есть любой компилятор вправе её неподдерживать, и он всё равно будет соотвествовать стандарту.

То есть, жертва пропаганды, компилятор вообще может ничего не поддерживать и это будет соответствовать стандарту. Стандарт позволять создавать реализации, которые клали на стандарт.

Да и к тому же любой адекватный код на си всегда ссал на стандарт, а уж тем более используя стандарт ты можешь написать только лабу, хотя вряд ли ты даже её писал. А уж тем более ссылаясь на маздайку, которая не может ни в один стандарт. Особенно более-менее актуальный.

nonedi18
()
Ответ на: комментарий от nonedi18

Our team is happy to announce that C11 and C17 are becoming supported language versions in the MSVC compiler toolset starting with Visual Studio 2019 version 16.8 Preview 3!

For many years Visual Studio has only supported C to the extent of it being required for C++. Things are about to change now that a conformant token-based preprocessor has been added to the compiler. With the advent of two new compiler switches, /std:c11 and /std:c17, we are officially supporting the latest ISO C language standards.

https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-support-arriving-in-msvc/

anonymous
()
Ответ на: комментарий от anonymous

Ну и, что ты мне родил? Убогие своровали сишный огрызок, потому как в цпп подняли версию сишки. Это не является полноценной реализацией.

А уж тем более ссылаться на потуги маздайских клоунов. Ценность этим маня-заявлениям ноль. Эти клоуны уже сколько заявляют о какой-то поддержке цпп, но каждый раз они врут. Хотя ЦА привыкла жрать дерьмо с лопаты и им нормально.

Этого дерьма на годболте нет и проверить его невозможно.

nonedi18
()
Ответ на: комментарий от nonedi18

Эти клоуны уже сколько заявляют о какой-то поддержке цпп, но каждый раз они врут.

Местами получше чем в GCC/Clang, и этих мест всё больше. И да, я не про самые последние фичи плюсов, а про те ещё времён C++98/03.

anonymous
()
Ответ на: комментарий от anonymous

Местами получше чем в GCC/Clang, и этих мест всё больше.

Примеры. Кстати, у тебя настолько плохо с методичкой. gcc - это и есть си, потому как си - это гнуси. А шланг - это альтернативная реализация гнуси.

И да, я не про самые последние фичи плюсов, а про те ещё времён C++98/03.

Ахренительные мазы. Самый последние - это те, что младше 20 лет. Да, последние - это именно это. Чини методичку.

И да, 98/03 не является плюсами по определению. Ну и примеры ты не показал и не покажешь.

nonedi18
()
Ответ на: комментарий от nonedi18

Подрывом попенсорц-фанбоя доволен

Примеры

Напиши на C++ что-нибудь сложнее HelloWorld-а — у тебя будет вагон таких примеров. Офигеешь, насколько Clang не умеет, например, в шаблоны.

Ну и примеры ты не показал и не покажешь.

Как и ты, собсна.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.