Изучаю многопоточность в С++. Сделал простую программку на создание и вывод двумерного массива. Если массив больше 50х50 элементов то должен работать поток если меньше то работать должно без потоков. Но при работе с потоком программа выдает ошибку которая видна на скрине. Подскажите пожалуйста что не так.
#include <iostream>
#include <cstdlib>
#include <thread>
using namespace std;
void arrayBig(int rowLength, int columnsLength)
{
int i, j;
int arr[1000][1000];
for (i = 0; i <= rowLength - 1; i++)
{
for (j = 0; j <= columnsLength - 1; j++)
{
arr[i][j] = rand() % 10;
}
}
for (i = 0; i <= rowLength - 1; i++)
{
for (j = 0; j <= columnsLength - 1; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
}
int arrayLitle(int rowLength, int columnsLength)
{
int i, j;
int arr[1000][1000];
for (i = 0; i <= rowLength - 1; i++)
{
for (j = 0; j <= columnsLength - 1; j++)
{
arr[i][j] = rand() % 10;
}
}
for (i = 0; i <= rowLength - 1; i++)
{
for (j = 0; j <= columnsLength - 1; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
return arr[i][j];
}
int main()
{
int columnsLength = 0, rowLength = 0;
cout << "Укажите длину массива!\n";
cout << "Введите размер ряда: ";
cin >> rowLength;
cout << "Введите размер столбцов: ";
cin >> columnsLength;
if ((rowLength >= 50) || (columnsLength >= 50))
{
cout << "Работают потоки!" << endl;
std::thread aB(arrayBig, rowLength, columnsLength);
if (aB.joinable())
aB.join();
}
else
{
cout << "Справимся без потоков!!!" << endl;
arrayLitle(rowLength, columnsLength)
}
system("pause");
return 0;
}
Ну, я бы не назвал это многопоточностью... Вы просто делаете то же, что в основном потоке, в другом. Ну да ладно...
Но у вас для
int arr[1000][1000];
требуется, грубо говоря, 4 мегабайта стека. Не многовато ли? попробуйте выделять эту память динамически, или потренируйтесь на массиве, скажем, 100 на 100...
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пробовала разные варианты создания на выходе файла DLL, который содержит несколько строк, поскольку изучаю C# - C++ непонятен совсем