Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
бутафор
0 / 0 / 1
Регистрация: 05.10.2010
Сообщений: 43
1

Нужно, чтобы память под массив выделялась не через: new — delete, а через оператор malloc (calloc) — free

26.11.2014, 00:15. Просмотров 982. Ответов 6
Метки нет (Все метки)

Ребят, есть программа, которая работает, но нужно, чтобы память под массив выделялась не через : new - delete, а через оператор malloc(calloc) - free. Можете подсказать как сделать?
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
47
48
49
50
51
52
53
54
#include<stdio.h>
#include<conio.h>
#include<locale.h>
#include<math.h>
 
void main(){
setlocale(LC_CTYPE,"Russian");
int N,M;   //N- количество строк, M-количество стобцов.
printf("Введите количество строк матрицы X:");
scanf("%d",&N);
printf("Введите количество столбцов матрицы X:");
scanf("%d",&M);
int** X;
X=new int*[N];
//Ввод матрицы
int i,j;
printf ("Введите элементы матрицы X\n");
for (i=0;i<N;i++)
 {*(X+i)=new int[M];
   for(j=0;j<M;j++)
    {printf ("X[%d][%d]=", i,j);
     scanf("%d",&X[i][j]);
   }}
printf(" \n");
printf("Введенный массив: \n");
for (int i = 0; i < N; ++i)
{   // Выводим на экран строку i
    for (int j = 0; j < M; ++j)
    {
    printf ("  %4.0d  ", *(*(X+i)+j))  ;
    }
    printf("\n");
    // Строка завершается символом перехода на новую строку
}
for (i=0;i<N;i++)
{
double sum_str=0;
double sr_arif=0;
for (j=0;j<M;j++)
{
sum_str=sum_str+*(*(X+i)+j);
}
//printf ("Сумма строки %d = %.3lf \n", i+1, sum_str);
sr_arif=sum_str/M;
printf ("Среднее арифметическое строки %d = %.3lf \n ", i+1, sr_arif);
}
 
 
for (i=0; i<N; i++) 
    delete [](*(X+i));
    delete []X;
 
_getch();
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2014, 00:15
Ответы с готовыми решениями:

Как free освобождает память, выделенную через malloc?
Как функция free(void*) освобождает память выделенную malloc(). Если в malloc передавая размер...

В чем преимущества new и delete и могут ли они действительно заменить функции calloc, malloc, free, realloc?
Язык программирования C поддерживает функции динамического управления пямятью: calloc, malloc,...

Можно ли выделять память под объект класса с помощью функций calloc, malloc или realloc?
Интересует данный вопрос. Можно ли и имеет ли вобще смысл например выделять память под объект...

Нужно ли под массив выделять память функциями malloc или new?
собственно вот программа по вводу размера массива, вводу массива, сортировки: #include &lt;iostream&gt;...

Нужно переделать программу, так чтобы память выделялась не статически, а динамически
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

6
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4853 / 2496 / 697
Регистрация: 18.10.2014
Сообщений: 4,333
26.11.2014, 01:17 2
Цитата Сообщение от бутафор Посмотреть сообщение
printf (" *%4.0d *", *(*(X+i)+j)) *;
А с какой целью указана точность 0? Это было сделано специально?
0
бутафор
0 / 0 / 1
Регистрация: 05.10.2010
Сообщений: 43
26.11.2014, 01:31  [ТС] 3
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А с какой целью указана точность 0? Это было сделано специально?
Это чтобы массив ровным выводился
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4853 / 2496 / 697
Регистрация: 18.10.2014
Сообщений: 4,333
26.11.2014, 02:22 4
Цитата Сообщение от бутафор Посмотреть сообщение
Это чтобы массив ровным выводился
Не совсем понимаю. "Чтобы массив ровным выводился" как я понимаю была указана ширина поля "4".

Мой вопрос же про точность ".0". Зачем она была указана? Единственное отличие точности ".0" от вообще не указанной точности заключается в том, что значение '0' не будет печататься вообще. Какой в этом смысл в данном случае?
0
бутафор
0 / 0 / 1
Регистрация: 05.10.2010
Сообщений: 43
26.11.2014, 10:24  [ТС] 5
Ну, честно говоря я сам пока не особо понимаю, мне подсказали так написать, я написал, вроде работает)
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4853 / 2496 / 697
Регистрация: 18.10.2014
Сообщений: 4,333
26.11.2014, 10:33 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от бутафор Посмотреть сообщение
я написал, вроде работает)
Тогда еще раз: формат "%4.0d" означает, что нулевые значения вообще не будут выводиться, т.е. вместо нулей будет оставляться пустое поле ширины 4. Вам именно это надо?

Если же вы хотите видеть нулевые значения, то тогда - просто "%4d".
0
бутафор
0 / 0 / 1
Регистрация: 05.10.2010
Сообщений: 43
26.11.2014, 14:14  [ТС] 7
Ок, спасибо, исправим. А по поводу выделения памяти не подскажете?
0
26.11.2014, 14:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2014, 14:14

Из malloc-free в new delete
Есть код с выделением памяти с помощью malloc, надо сделать с new delete Вроде сделал,...

Работа с памятью через malloc,realloc и free
Вот начал работать с памятью в c++ и появилось несколько вопросов. 1 - r = (int...

Создание объекта класса, чтобы он постоянно висел в памяти, и чтобы память выделялась один раз
Как можно организовать класс, а так же создание объекта класса, чтобы он постоянно висел в памяти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru