Тема: С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 році писати юзеру ототопвзфіваждьопарафєіва.
Це ж глупство. За таке треба бити по пиці.
Я вже не кажу про назви і нульовий рівень абстракції. 
Задача викладача, я вважаю, навчити писати код максимально не так, як ото тут понаписано.
Бо як і де працюють малок, чи калок, чи нью можна прочитати в довідниках. А як писати чистий код, мало де знайдеш.
Для відправлення відповіді ви повинні увійти або зареєструватися