BG Development


  Reply to this topicStart new topicStart Poll

> Компилиране на код с грешка и без при различни ред
ivo756
Публикувано на: 20-11-2023, 20:29
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 1
Регистриран на: 20.11.23



Защо деклариране на двумерен масив със зададени размери от потребител се компилира без грешка в CodeBlocks, а в Visual Studio бие грешка, че размерите на редовете и колоните трябва да са константи? Ето и кода
CODE

#include <iostream>
using namespace std;
int main() {
   int rows, cols;

   // Въвеждане на броя на редовете и колоните от потребителя
   cout << "Въведете брой на редовете: ";
  cin >> rows;

   cout << "Въведете брой на колоните: ";
   cin >> cols;

   // Декларация на двумерен масив с размери, въведени от потребителя
   int myArray[rows][cols]; //ТУК БИЕ ГРЕШКА

   // Въвеждане на стойности в двумерния масив
   std::cout << "Въведете стойности в двумерния масив:" << std::endl;
   for (int i = 0; i < rows; ++i) {
       for (int j = 0; j < cols; ++j) {
           std::cout << "Елемент [" << i << "][" << j << "]: ";
           std::cin >> myArray[i][j];
       }
   }
PMEmail Poster
Top
Bender++
Публикувано на: 20-11-2023, 21:02
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 479
Регистриран на: 18.04.21



защото не е библейско

Хората са преценили,че не ехубаво да имаш variable length arrays и са го направили "optional" в стандарта. И съответно меките не са го имплементирали в техния компилатор, докато в GCC го има имплементирано. Ползвай вектор като бял човек


--------------------
Ваксините са лъжа и НЕ работят! Не на ковид фашизма!
Слава на Цар Путин! Долу украинските фашисти!
Слава на героите - Z V
PMEmail Poster
Top
SuN
Публикувано на: 20-11-2023, 21:53
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 12564
Регистриран на: 27.01.05



Само това ли ти казва? Цялото съобщение ли си прочел?

С g++ под ГНУ/линукс, ако се помолиш правилно, дава следното обяснение:
CODE
test.cpp: In function ‘int main()’:
test.cpp:14:8: warning: ISO C++ forbids variable length array ‘myArray’ [-Wvla]
  14 |    int myArray[rows][cols]; //ТУК БИЕ ГРЕШКА
     |        ^~~~~~~
test.cpp:14:8: warning: ISO C++ forbids variable length array ‘myArray’ [-Wvla]


--------------------
Само аз не троля.
Всички коментари са плод на художествена измислица и нямат общо с действителни и недействителни лица, събития и факти.
PMEmail Poster
Top
Дон Реба
Публикувано на: 21-11-2023, 06:30
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 10051
Регистриран на: 11.11.06



по замисъл езика не позволява такива неща, някои писачи на компилатори обаче го позволяват, но ти по-добре не го ползвай
PM
Top
samolet4e
Публикувано на: 22-11-2023, 16:14
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 16
Регистриран на: 16.03.22



Ето какво казва ChatGPT по въпроса. Надявам се, че английският не е проблем.

Yes, there is an error in the C++ code.

The error is in the line 'int myArray[rows][cols];'. In C++, the size of an array must be known at compile-time, while 'rows' and 'cols' are user inputs and their values are not known until runtime. Therefore, you cannot declare an array using variables to specify its size.

One way to fix this error is to use dynamic memory allocation with the 'new' keyword:

CODE

#include <iostream>
using namespace std;

int main() {
  int rows, cols;

  cout << "Enter number of rows: ";
  cin >> rows;

  cout << "Enter number of columns: ";
  cin >> cols;

  int** myArray = new int*[rows];
  for (int i = 0; i < rows; i++) {
      myArray[i] = new int[cols];
  }

  for (int i = 0; i < rows; i++) {
      for (int j = 0; j < cols; j++) {
          cout << "Enter element [" << i << "][" << j << "]: ";
          cin >> myArray[i][j];
      }
  }

  for (int i = 0; i < rows; i++) {
      for (int j = 0; j < cols; j++) {
          cout << myArray[i][j] << " ";
      }
      cout << endl;
  }

  // Deallocate memory
  for (int i = 0; i < rows; i++) {
      delete[] myArray[i];
  }
  delete[] myArray;

  return 0;
}


In this solution, we declare 'myArray' as a pointer to a pointer to an integer (int**) and use dynamic memory allocation to create the 2D array. Remember to deallocate the allocated memory after you're done using it to avoid memory leaks.

Линк към ChatGPT ако искате да питате още нещо:

TalkAI
PMEmail Poster
Top
SuN
Публикувано на: 22-11-2023, 20:10
Quote Post


Group Icon
Име:
Група: Администратор
Ранг: Почетен член

Мнения: 12564
Регистриран на: 27.01.05



Влязох в 21 век! Благодаря, samolet4e, за сайта! icon_smile.gif


--------------------
Само аз не троля.
Всички коментари са плод на художествена измислица и нямат общо с действителни и недействителни лица, събития и факти.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0