Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Выделить память под двумерный массив за один вызов функции malloc - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задачка по матрицам (вывести номер строчки в которой количество положительных елементов самая большая) http://www.cyberforum.ru/cpp-beginners/thread865344.html
для матрицы С(20,20) вывести номер строчки в которой количество положительных елементов самая большая
C++ Блок-схема (Visio) Найти наименьший элемент матрицы A(n x m) и номер строки и столбца, в которых он находится. Эту строку заполнить значениями наибольшего элемента матрицы. Примечание: Если размерность массива не... http://www.cyberforum.ru/cpp-beginners/thread865339.html
C++ Натолкните на ошибку
Составить программу для вычисления значений функции F(x) на отрезке с шагом h. Результат представить в виде таблицы, первый столбец которой — значения аргумента, второй — соответствующие значения...
Очереди и стеки C++
#include "stdafx.h" #include "iostream" using namespace std; struct stack { int x; stack *Next,*Head; };
C++ Для каждой половины матрицы вычислить и вывести количество положительных элементов http://www.cyberforum.ru/cpp-beginners/thread865322.html
В матрице А (m столбцов и n строк n-четное) для каждой ее половины (верхней и нижней) вычислить и вывести кол-во положительных элементов. Та к же определить , в какой из этих половин среднее...
C++ Вывести данные о школе с самым большим отношением числа поступивших к числу выпускников Дана информация о пяти школах. Структура имеет поля: номер школы, год, количество выпускников, число поступивших в вузы. Вывести данные о школе с самым большим отношением числа поступивших к числу... подробнее

Показать сообщение отдельно
Isantel
13 / 13 / 1
Регистрация: 23.11.2010
Сообщений: 254
15.05.2013, 02:03  [ТС]
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Ну, как...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int n, m;
// ...
int **array = allocate(n, m);
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        array[i][j] = (i + j) % 3 + j;
    } 
}
// ...
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        printf("%d ", array[i][j]);
    }
    printf("\n");
}
// ...
deallocate(array); // вызывает free(array);
C++
1
    int **result = data;
ошибка - Ошибка error C2440: инициализация: невозможно преобразовать "void *" в "int **"

вообщем получилась такая программа

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "stdafx.h"
#include <stdlib.h> 
 
int** alloc(size_t n, size_t m)
{
    // Массив из n * m интов + память на n указателей.
    void *data = malloc(n * m * sizeof(int) + n * sizeof(int*));
    
    // Первые n * sizeof(int*) байт заняты массивом указателей.
    // Остальной кусок - это двумерный массив.
    int **result = data;
    result[0] = ((int *) data) + n; // = data + n * sizeof(int*)
 
    // Этот массив не только должен существовать, но и указатели
    // в нём должны указывать куда следует. Двумерный массив n * m
    // состоит из n строк по m элементов. Если строки идут подряд, то
    // очевидно, что между i-й и 0-й находится i * sizeof(int) байт.
    for (size_t i = 0; i < n; i++) {
        result[i] = result[0] + m * i;
    }
 
    return result;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int n, m;
// ...
int **array = alloc(n, m);
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        array[i][j] = (i + j) % 3 + j;
    } 
}
// ...
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        printf("%d ", array[i][j]);
    }
    printf("\n");
}
// ...
deallocate(array); // вызывает free(array);
 
    return 0;
}
и что писать в функции
C++
1
 deallocate(array);
я дуб дубом в этом)) может быть поможете полным кодом?)
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru