Добрый день. Переписываю прожку из под линуксовского gcc под win. В Dev-C++ выделение памяти в стеке (строка [38] ниже) проходит нормально, в VC6.0++ - ошибка. Подскажите пожалуйста как Вы обходите такую "ситуацию" в VC6.0++ ? Код (Text): [..] MyWord_generation(int nLength) [37] { [38] char szWord[nLength + 1]; [39] ... [..] return true; } int main() { ... MyWord_generation(rand()%(nRange)) ... } c:\_temp\4pass\4pass.cpp(38) : error C2057: expected constant expression c:\_temp\4pass\4pass.cpp(38) : error C2466: cannot allocate an array of constant size 0 c:\_temp\4pass\4pass.cpp(38) : error C2133: 'szWord' : unknown size Спасибо.
:-О Как это? По синтаксису языка C/C++ разве можно выделять автоматические массивы неконстантного размера?
Хотя, теоретически может быть это было бы допустимо, если такой массив среди всеъ автоматических переменных функции один и компилятор его сделает последним в стековом фрейме
Код (Text): char *szWord=new char[nLength+1]; это взлетит, токо потом прибери за собой памаять выделенную. Dmitry_Milk Ммм ну незнаю столько дизасмом не потрошил файлы всегда застаю нечто вроде Код (Text): czWord dd ? dd ? ... dd ?
Не понял, это в каком месте? Если это просто резервирование места в сегментах, то этож не автоматические переменные, это глобальные и статические. А в данном же случае надо в стековом кадре для очередного вызова функции зарезервировать заранее неизвестное количество байт. Это конечно сделать без проблем, но все смещения в стековом кадре к автоматическим переменным компилятор считает во время компиляции, и таким образом переменное количество байт в стековом кадре можно сделать только в самом конце кадра.
Ага, а если он не знает, где там выходы из функции? А если там в норме вылеты по исключениям из глубжележащих выозовов? Тут какой-то смартпоинтер на char надо.