Loading...
Klamercho avatar Klamercho 0 Точки

Странен проблем на задача Minesweeper

Здравейте, 

Реших задачата по следния начин https://pastebin.com/TAh3GRUs . Но не работи защото въпреки, че съм задал всички елементи от масивите да бъдат 0-ла. точно един не се нулира и ми разрушава всичко. В последствие оправих програмата като просто добавих следния код след инициализацията на масивите : 

for(int i = 0; i<Rows; i++)
{
    for(int j = 0; j<Collums; j++)
    {

    field[i][j] = 0;
    }
}

Но все пак не разбирам защо не се нулира изцяло инциализирания ми масив. Опитах да го направя с вече зададени размери 5 на 5 и въпреки това пак единия елемент беше някакво случайно число. Ето скрийншот на това което ми излиза:

https://drive.google.com/file/d/1zhRGf-tLvFSJPtniNbzyQOa7n8JWyOB5/view?usp=sharing

Весели празници на всички! 

 

Тагове:
0
C++ Programming
MartinBG avatar MartinBG 4803 Точки
Best Answer

Масивът field е разположен в стека и е с променлив размер (неизвестен при компилация, задава се при изпълнение на програмата), а такива масиви не могат да бъдат инициализирани директно при декларирането си.

На практика този код от програмата само създава масива като игнорира частта с инициализацията:

int field[Rows][Collums] = {0};

За едномерни масиви при някои компилатори инициализацията може и да сработи, но по-добре не разчитай на това.

 

При по-стриктни настройки за проверки в някои компилатори, горният код ще хвърли следната компилационна грешка:

error: variable-sized object may not be initialized

 

Читавите IDE-та (като CLion) дори маркират кода като проблемен заради същата грешка.

 

За справяне с проблема (освен тривиалното обхождане и инициализиране на всеки елемент по отделно) може да използваш STL контейнери (array, vector), да занулиш паметта с memset, или да създадеш масива в динамичната памет (heap). Повече за многомерните масиви може да прочетеш в отговорите към този въпрос.

1
27/12/2018 10:38:44
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.