2015-10-22 2 views
4

enter image description hereПроблемы с VLA-й в С

Я бег Xcode 7.1 на Mac OS X 10.11. Я пытаюсь объявить массив VLA в C, но я не могу этого сделать.

Второй я использую переменную в объявлении массива, это спорный вопрос. Массив не создается. Я выкопал в настройках компилятора, попытался установить GCC вручную, я не могу понять это. Может ли кто-нибудь определить проблему? Из того, что я понимаю, VLA стал стандартным с C99 и из того, что я могу сказать, что мой Xcode работает на C11. Какая сделка здесь? Включены изображения кода и настроек.

void printTriangle (int height, char rowPatterns[][height]) { 

    int rowSize = 2 * height - 1; 
    char rowString[rowSize]; //string to store in pattern's array 
    int characterCount = rowSize; //number of character printed per row of triangle 
    int asteriskCount = 1; //number of asterisks printed in each row 
    int spaces = (characterCount - asteriskCount)/2; //how many spaces need to be printed in this current row 
    int rowCount; 
// rest of the code... 
    } 

enter image description here

enter image description here

enter image description here

+0

Как называется 'printTriangle'? – Downvoter

+0

printTriangle (высота, узоры); Это не проблема объявления функции - я открыл совершенно другой проект Xcode и попытался создать массив переменной длины, и это не сработало. Переменная была там, но никогда не инициализировалась. Даже не было пустых значений. Просто переменная char с ... ничего. –

+3

Что вы имеете в виду, когда говорите, что объявление является «спорным»? Вы получаете ошибки компилятора? Runtime падает? Неожиданные результаты? Кроме того, если вы хотите сохранить строку в строке rowString, не должно ли она быть 'rowSize + 1' байт, чтобы она соответствовала терминатору строк? –

ответ

1

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

Смежные вопросы