Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
netiv1
11 / 11 / 4
Регистрация: 12.10.2011
Сообщений: 42
1

Правильно ли я выделил память под элементы массива

22.05.2012, 19:59. Просмотров 459. Ответов 9
Метки нет (Все метки)

Задание: Дана матрица N*M, содержащая оценки класса за второе полугодие. Подсчитайте количество неуспевающих учеников(имеются оценки 0,1,2,3).
Вот сделал, но не уверен что правильно выделил память т.к. массив двумерный. Прога то работает, но она работает даже при выделении памяти под a= new int *[0], поэтому и проверить норм не могу, может как-то по другому надо память выделять.
Пожалуйста посмотрите у кого есть немного времени. И подскажите как определить выделилась ли память корректно.
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
#include <stdio.h>
#include <conio.h>
main()
{
int i,j,n,m,k=0;
int **a;
puts("Vvedite kol. stolbcov i strok (cherez probel):");
scanf("%d %d",&n,&m);
  a=new int *[n];
  for (i=0; i<n; i++)
    a[i]=new int[m];
puts("\n Input Elementi:");
  for (i=0; i<n; i++)
  for (j=0; j<m; j++)
    scanf("%d",&a[i][j]);
  for (i=0; i<n; i++)
  for (j=0; j<m; j++)
    if ((a[i][j] == 0) || (a[i][j] == 1) || (a[i][j] == 2) || (a[i][j] == 3))
    k = k+=1;
  printf("Kolichestvo neyspevausсih studentov=%d", k);
  for (i=0; i<n; i++)
  delete[] a[i];
  delete []a;
  getch();
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2012, 19:59
Ответы с готовыми решениями:

Подсчитать, сколько элементов ввел пользователь, выделить память под два массива и переписать в них элементы
Ребята помогите решить задачу: Пользователь вводит размер массива и...

Как правильно выделить память под структуру?
имеются структуры struct ship { struct point first; struct point last;...

Как правильно выделить память под двумерный массив в шаблоне?
template &lt;class T&gt; T* array &lt;T&gt;::f (unsigned size) { //...... ...

Как правильно удалять выделенную память под указатель на указатель?
есть код #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt;...

Элементы заданного массива расположить в обратном порядке. Правильно ли решена задача?
В общем задача такая : элементы заданного массива T(k) расположить в обратном...

9
alkagolik
Заблокирован
22.05.2012, 20:03 2
netiv1, нет, new/delete это с++. В си памятью занимаются функции malloc/calloc/realloc.

Добавлено через 1 минуту
Цитата Сообщение от netiv1 Посмотреть сообщение
И подскажите как определить выделилась ли память корректно.
можешь не сомневаться, все что попросил, все выделится.
1
netiv1
11 / 11 / 4
Регистрация: 12.10.2011
Сообщений: 42
22.05.2012, 20:55  [ТС] 3
Цитата Сообщение от alkagolik Посмотреть сообщение
netiv1, нет, new/delete это с++. В си памятью занимаются функции malloc/calloc/realloc.
А вообще правильно ли решена задача, если не учитывать что new/delete это с++?
0
alkagolik
Заблокирован
22.05.2012, 21:05 4
да. строку 19 перепиши так
C
1
++k;
1
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
22.05.2012, 21:14 5
Цитата Сообщение от netiv1 Посмотреть сообщение
a=new int *[n];
Цитата Сообщение от netiv1 Посмотреть сообщение
Правильно ли я выделил память под элементы массива
Нет, не правильно!!!
0
Ilyawow
26 / 26 / 7
Регистрация: 18.11.2011
Сообщений: 266
24.05.2012, 07:56 6
Память выделяется так
C++
1
2
A= new int [N];
delete A;
вот так
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
24.05.2012, 10:01 7
Цитата Сообщение от Ilyawow Посмотреть сообщение
вот так
Не правильно! А вот так верно
C++
1
2
A = new int [N];
delete [] A;
1
netiv1
11 / 11 / 4
Регистрация: 12.10.2011
Сообщений: 42
24.05.2012, 20:10  [ТС] 8
Цитата Сообщение от go Посмотреть сообщение
Не правильно! А вот так верно
C++
1
2
A = new int [N];
delete [] A;
Запутался совсем, а почему не так?
C++
1
A = new int *[N];
Вот написал фрагмент проги:
допустим массив m[3][4]:
C++
1
2
3
4
5
6
7
8
int **m;
m=new int*[3];   // захват памяти для указателей
for (int i=0; i<3; i++)  //захват памяти для элементов
    m[i]=new int[4];  
… // обработка элементов
for (int i=0; i<3; i++)  // освобождение памяти занятой под элементы
     delete [] m[i];
delete [] m;  //освобождение памяти занятой под указатели
Разве должно быть так? Но почему?
C++
1
m=new int [3]
0
alkagolik
Заблокирован
24.05.2012, 20:40 9
Цитата Сообщение от netiv1 Посмотреть сообщение
Вот написал фрагмент проги:
допустим массив m[3][4]:
верный фрагмент, но это никак не Си.
1
silent_1991
29.05.2012, 19:03     Правильно ли я выделил память под элементы массива
  #10
 Комментарий модератора 
Перенесено из "С для начинающих"
0
29.05.2012, 19:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2012, 19:03
Привет! Вот еще темы с ответами:

Правильно ли очищается память?
сть программа которая работает с динамическим массивом. работает она так:...

Правильно ли я освобождаю память
Вот есть примерно такой код. Метод baseFactory() постоянно вызывается и там...

Realloc выделяет память для массива int и не выделяет память для массива double
Скажите пожалуйста, почему вот этот код работает: #include &lt;iostream&gt;...


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

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

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