Тема: Сalloc,malloc,new.
Підкажіть де я можу детально почитати про ці 3 функції в С++.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Сalloc,malloc,new.
Для відправлення відповіді ви повинні увійти або зареєструватися
Підкажіть де я можу детально почитати про ці 3 функції в С++.
https://uk.wikipedia.org/wiki/New_(C%2B%2B) new ( вікіпедія )
А для двохмірних масивів не знаєте де може бути інформація?
А для двохмірних масивів не знаєте де може бути інформація?
вікіпедія =_= https://uk.wikipedia.org/wiki/%D0%94%D0 … 0%B8%D0%B2 - масиви
2х вимірні масиви https://www.bestprog.net/uk/2017/03/04/ … %BC%D0%B0/
все є у відкритому доступі, вам лишень потрібно надрукувати в пошуковій строці свій запит -_-
тримай rofl відео на ютюбі як гуглити ( відео російською )
А для двохмірних масивів не знаєте де може бути інформація?
Гадаю для початку треба пошукати десь там:
Вища математика
Чисельні методи в інформатиці
А вже потім шукати методи реалізації тією чи іншою обраною мовою програмування.
А для двохмірних масивів не знаєте де може бути інформація?
В C++ немає вбудованого типу для двовимірних масивів. Що є - я писав колись.
І так, new - оператор, а не функція.
Накидав такий код
#include <iostream>
#include <ctime>
using namespace std;
int** create_arr(const int SIZE)
{
int part, rows, columns;
int** arr;
cout << "1 - malloc\n2 - calloc\n3 - New\n\n Choose 1 2 3 to create arr\n:";
cin >> part;
switch (part)
{
case 1:
arr = malloc(rows , columns);//Помилка:"Фун-я не приймає 2 аргументів"
transpose(arr, rows, columns);// Індефікатор незнайдений
for (int i = 0; i < rows; i++)
{
free(arr[i]);
}
free(arr);
break;
case 2:
arr = calloc(rows , columns );//Помилка:"Не можна перетворити void* в int**",При чому я не пам'ятаю що десь використовував void
transpose(arr, rows, columns);
for (int i = 0; i < rows; i++)
{
free(arr[i]);
}
free(arr);
break;
case 3:
arr = New(rows, columns);
transpose(arr, rows, columns);
for (int i = 0; i < rows; i++)
{
delete[](arr[i]);
}
delete[](arr);
break;
default:
cout << "Error";
}
return 0;
}
int** malloc(int rows, int columns)
{
srand(time(NULL));
int i, j;
int** arr = (int**)malloc(columns * sizeof(int*));
for (int i = 0; i < rows; i++)
{
arr[i] = (int*)malloc(columns * sizeof(int));
}
int A;
cout << "Choose\n 1 - random\n 2 - manually\n\n";
cin >> A;
switch (A)
{
case 1:
for (size_t i = 0; i < rows; i++)
{
for (j = 0; i < columns; j++)
{
arr[i][j] = 1 + rand() % 9;
arr[0][0] = 9;
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
case 2:
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cin >> arr[i][j];
}
}
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
default:
cout << "Error";
}
return arr;
}
int** calloc(int rows, int columns)
{
srand(time(NULL));
int i, j;
int** arr = (int**)calloc(rows * sizeof(int*),columns * sizeof(int*));
for (int i = 0; i < rows; i++)
{
arr[i] = (int*)calloc(rows * sizeof(int*),columns * sizeof(int));
}
int A;
cout << "Choose\n 1 - random\n 2 - manually";
cin >> A;
switch (A)
{
case 1:
for (size_t i = 0; i < rows; i++)
{
for (j = 0; i < columns; j++)
{
arr[i][j] = 1 + rand() % 9;
arr[0][0] = 9;
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
case 2:
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cin >> arr[i][j];
}
}
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
default:
cout << "Error";
}
return arr;
}
int** New(int rows, int columns)
{
srand(time(NULL));
int i, j;
int** arr = (int**)malloc(columns * sizeof(int*));
for (int i = 0; i < rows; i++)
{
arr[i] = (int*)malloc(columns * sizeof(int));
}
int A;
cout << "Choose\n 1 - random\n 2 - manually";
cin >> A;
switch (A)
{
case 1:
for (size_t i = 0; i < rows; i++)
{
for (j = 0; i < columns; j++)
{
arr[i][j] = 1 + rand() % 9;
arr[0][0] = 9;
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
case 2:
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cin >> arr[i][j];
}
}
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
default:
cout << "Error";
}
return arr;
}
int** transpose(int** arr, int Rows, int Columns)
{
int i, j;
int** tmp = new int* [Columns];
for (i = 0; i < Columns; ++i)
tmp[i] = new int[Rows];
for (i = 0; i < Columns; ++i)
for (j = 0; j < Rows; ++j)
tmp[i][j] = arr[j][i];
return tmp;
}
void delete_arr(int** arr, const int SIZE)
{
for (int i = 0; i < SIZE; i++)
{
delete[] arr[i];
}
delete arr;
}
int main()
{
srand(time(NULL));
const int SIZE = 2;
int** arr = create_arr(SIZE);
system("pause");
return 0;
}
arr = malloc(rows , columns);//Помилка:"Фун-я не приймає 2 аргументів"
Ем... я навіть не знаю, що додати. Все описано максимально точно. Перечитайте опис функції malloc
transpose(arr, rows, columns);// Індефікатор незнайдений
Ну так, немає проголошення transpose до цього місця.
arr = calloc(rows , columns );//Помилка:"Не можна перетворити void* в int**",При чому я не пам'ятаю що десь використовував void
Коли виправите помилку з malloc, там буде те саме. Перечитайте опис функцій calloc і malloc, і особливо зверніть увагу на тип, що вони повертають.
Показує 0 помилок але коли заходити в список висвітлює 2:
1)LNK2019 посилання на недозволений зовнішній символ_main в функции "int __cdecl invoke_main(void)"
2)LNK1120 недозволених зовнішніх елементів: 1
Неможу знайти цих 2 помилок, а все решту вроді як працює.
#include <iostream>
#include <ctime>
using namespace std;
int** malloc(int rows, int columns);
int** calloc(int rows, int columns);
int** New(int rows, int columns);
int** transpose(int** arr, int rows, int columns);
int maim()
{
int part, rows, columns;
int** arr;
cout << "1 - malloc\n2 - calloc\n3 - New\n\n Choose 1 2 3 to create arr\n:";
cin >> part;
cout << "Rows=\n\nColumns=\n\n" << endl;
cin >> rows >> columns;
switch (part)
{
case 1:
arr = malloc(rows , columns);
transpose(arr, rows, columns);
for (int i = 0; i < rows; i++)
{
free(arr[i]);
}
free(arr);
break;
case 2:
arr = calloc(rows , columns);
transpose(arr, rows, columns);
for (int i = 0; i < rows; i++)
{
free(arr[i]);
}
free(arr);
break;
case 3:
arr = New(rows, columns);
transpose(arr, rows, columns);
for (int i = 0; i < rows; i++)
{
delete[] arr[i];
}
delete[] arr;
break;
default:
cout << "Error";
}
return 0;
}
int** malloc(int rows, int columns)
{
srand(time(NULL));
int i, j;
int** arr = (int**)malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++)
{
arr[i] = (int*)malloc(columns * sizeof(int));
}
int M;
cout << "Choose\n 1 - random\n 2 - handmade\n\n";
cin >> M;
switch (M)
{
case 1:
for (size_t i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
arr[i][j] = 1 + rand() % 9;
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
case 2:
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cin >> arr[i][j];
}
}
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
default:
cout << "Error";
}
return arr;
}
int** calloc(int rows, int columns)
{
srand(time(NULL));
int i, j;
int** arr = (int**)calloc(rows * sizeof(int*),columns * sizeof(int*));
for (int i = 0; i < rows; i++)
{
arr[i] = (int*)calloc(rows * sizeof(int*),columns * sizeof(int));
}
int A;
cout << "Choose\n 1 - random\n 2 - handmade";
cin >> A;
switch (A)
{
case 1:
for (size_t i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
arr[i][j] = 1 + rand() % 9;
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
case 2:
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cin >> arr[i][j];
}
}
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
default:
cout << "Error";
}
return arr;
}
int** New(int rows, int columns)
{
srand(time(NULL));
int i, j;
int** arr = (int**)malloc(columns * sizeof(int*));
for (int i = 0; i < rows; i++)
{
arr[i] = (int*)malloc(columns * sizeof(int));
}
int A;
cout << "Choose\n 1 - random\n 2 - handmade";
cin >> A;
switch (A)
{
case 1:
for (size_t i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
arr[i][j] = 1 + rand() % 9;
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
case 2:
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cin >> arr[i][j];
}
}
for (size_t i = 0; i < rows; i++)
{
for (size_t j = 0; j < columns; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
break;
default:
cout << "Error";
}
return arr;
}
int** transpose(int** arr, int rows, int columns)
{
int i, j;
int** tmp = new int* [columns];
for (i = 0; i < columns; ++i)
{
tmp[i] = new int[rows];
}
for (i = 0; i < columns; ++i)
{
for (j = 0; j < rows; ++j)
{
tmp[i][j] = arr[j][i];
}
cout << endl;
}
return tmp;
system("pause");
}
І кого це ви калічити зібралися? Функцію main?
Хех
І кого це ви калічити зібралися? Функцію main?
чи то я сліпий , чи то в коді нема функції
int main(){}
???
таки її немає -_-
upd.
А, так ось кого ви покалічили!
int** malloc(int rows, int columns); int** calloc(int rows, int columns);
Будь ласка, видаліть ці два рядки з коду, а потім скопіюйте на форум визначення цих функцій зі стандарту (або будь-якого сайту, присвяченого мові C) та спробуйте просто поставити питання.
Гей була в мене рушниця
Та й дивчина-чарівниця
Та й коняка-розбишака
Залишилась гола срака
Або казочка про те як не треба плутати хрон з патісоном і чому С та С++ це різні мови.
був собі програміст, що плутав С та С++, та помер, бо не знав, яким чином собі прострелити ногу, тому прострелив собі
голову. кінець
ХАХАХАХА
Гей була в мене рушниця
Та й дивчина-чарівниця
Та й коняка-розбишака
Залишилась гола сракаАбо казочка про те як не треба плутати хрон з патісоном і чому С та С++ це різні мови.
був собі програміст, що плутав С та С++, та помер, бо не знав, яким чином собі прострелити ногу, тому прострелив собі
голову. кінець
Перепрошую за попередній коментар, я неуважно прочитав код. Не звертайте на нього уваги.
Дуже не бажано називати власні функції так само як системні. Зокрема, в
int** calloc(int rows, int columns)
{
srand(time(NULL));
int i, j;
int** arr = (int**)calloc(rows * sizeof(int*),columns * sizeof(int*));
у вас виникає небажана рекурсія.
Далі: у вас функції malloc, calloc (хоч би Malloc і Calloc назвали) і New на 80% складаються зі спільного коду, який заповнює масиви. Винесіть його з цих функцій в окрему функцію fill_array чи якось так.
Ну і у вас замість послідовних викликів, умовно,
create_arr();
fill_arr();
transpose();
release();
структура викликів, де кожна функція викликає наступну (а transpose - ще й виключно new).
Це погано. Переробіть на хоча б таке:
int kind /*1-calloc, 2-malloc, 3-new*/,
rows=3, cols=5; //взагалі треба вводити
int **arr = create_arr(kind, rows, cols);
fill_array(arr, rows, cols);
print(arr, rows, cols);
int **transposed = create_array(kind, cols, rows);
transpose(arr, transposed, rows, cols);
print(transposed, cols, rows);
release(a, kind, rows, cols);
release(transposed, kind, cols, rows);
Зараз би в 2021 році в процедурній мові робити функціональщину...
Зараз би в 2021 році не розуміти різницю між С та С++...
Зараз би в 2021 році писати юзеру ототопвзфіваждьопарафєіва.
Це ж глупство. За таке треба бити по пиці.
Я вже не кажу про назви і нульовий рівень абстракції.
Задача викладача, я вважаю, навчити писати код максимально не так, як ото тут понаписано.
Бо як і де працюють малок, чи калок, чи нью можна прочитати в довідниках. А як писати чистий код, мало де знайдеш.
Для відправлення відповіді ви повинні увійти або зареєструватися