C/C++

C++, указатели, массивы

В 16 строчке должно быть:
*arr[i] =...
разве нет???
Разбивайте задачу на подзадачи и используйте автоматическое выведение типов.

#include <iostream>
#include <iomanip>
using namespace std;
// Задаёт размер массива
size_t set_size(const char* msg) {
size_t value = 0U;
while (!value) {
cout << msg;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
}
return value;
}
// Безопасно выделяет память под динамический массив указанного размера
int* create_vector(const size_t length) {
return new(nothrow) int[length];
}
// Безопасно освобождает память по указателю на диамический массив
int* destroy_vector(int* vector) {
if (vector != nullptr) {
delete[] vector;
vector = nullptr;
}
return vector;
}
// Безопасно выделяет память под динамическую матрицу указанных размеров
int** create_matrix(const size_t rows, const size_t columns) {
auto matrix = new(nothrow) int* [rows];
if (matrix != nullptr) {
for (auto i = 0U; i < rows; ++i) {
matrix[i] = create_vector(columns);
if (matrix[i] == nullptr) {
for (auto j = 0U; j < i; ++j) {
if (matrix[j] != nullptr) {
matrix[j] = destroy_vector(matrix[j]);
}
}
delete[] matrix;
matrix = nullptr;
}
}
}
return matrix;
}
// Безопасно освобождает память по двойному указателю на динамическую матрицу
int** destroy_matrix(int** matrix, const size_t rows) {
if (matrix != nullptr) {
for (auto i = 0U; i < rows; ++i) {
destroy_vector(matrix[i]);
}
delete[] matrix;
matrix = nullptr;
}
return matrix;
}
int main() {
auto rows = set_size("Rows: ");
auto columns = set_size("Columns: ");
auto matrix = create_matrix(rows, columns);
if (matrix == nullptr) puts("Not enough memory!");
else {
puts("Work, brothers!");
// TODO:
matrix = destroy_matrix(matrix, rows);
puts("Memory resources are freed!");
}
system("pause > nul");
}
Azamat Abdikhasim
Azamat Abdikhasim
64 716
Лучший ответ
arr[i]=
Нет.
Либо arr[i] =, либо *(arr+i) =
ОБ
Олег Бычин
17 671
Куат Кожагулов (arr + i) может быть?
Куат Кожагулов тогда почему ошибкой будет
*arr[i] =...
не могу догнать (