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

Как добавить строку в динамический массив? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывод без e (6e+10,1.35e+8) http://www.cyberforum.ru/cpp-beginners/thread523192.html
Всем привет, есть вот такой код #include <cstdlib> #include <iostream> #include <math.h> float round(float n) { float t; t=n-floor(n);
C++ Нужна помощь с комментариями. Нужны комментарии и сделать так, чтобы вводилось только пятизначное число. #include "stdafx.h" #include <stdlib.h> #include <memory.h> #include <iostream> using namespace std; int * equ(char * x) { static int nums; http://www.cyberforum.ru/cpp-beginners/thread523186.html
Выяснить, пересекаются ли параболы. C++
Выяснить, пересекаются ли параболы y=ax2+bx+c и y=dx2+ex + f. При положительном ответе найти точки пересечения.
C++ обновления
При каждом выключении компа происходит обновление. Так надо? В разделе "С/С++ для начинающих" рассматриваются, как это ни странно, не особенности поведения компьютера, работающего под неизвестной ОС, а задачи начального уровня по программированию на С/С++. Спросите у кого-нибудь из разбирающихся знакомых, какая у Вас установлена операционная система, и в зависимости от результата разместите...
C++ списки http://www.cyberforum.ru/cpp-beginners/thread523174.html
Построить класс для работы с односвязным списком. Элементы списка - действительные числа. Создать два упорядоченных по возрастанию списка, слить их в один(также упорядоченный по возростанию), построив новый список.
C++ Удалить из массива целых чисел все элементы, являющиеся совершенными числами. Удалить из массива целых чисел все элементы, являющиеся совершенными числа ми. #include <iostream> #include <iomanip> #include <time.h> #include <stdio.h> #include <stdlib.h> using namespace std; void Randomize()//после войд значение не возвращается { подробнее

Показать сообщение отдельно
lesha1980
3 / 3 / 0
Регистрация: 06.01.2012
Сообщений: 42

Как добавить строку в динамический массив? - C++

20.03.2012, 17:44. Просмотров 5820. Ответов 4
Метки (Все метки)

Уважаемые форумчане подскажите как добавить строку в двумерный динамический массив - в нижнюю его часть?
Есть два кода - один:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <ctime>
using namespace std;
int **function_add(int **ar,int col,int row);
int main()
{
//Написать функцию, добавляющую строку (одномерный массив) 
//в конец двухмерного массива.
 
//создадим массив
    int col=5;
    int row=5;
    int **ar=new int *[row];
//выделим память под строки массива
    for(int i=0;i<row;i++)
         ar[i]=new int[col];
//заполним массив
    srand(time(NULL));
    for(int i=0;i<row;i++)
    {
       for(int j=0;j<col;j++)
       {
          ar[i][j]=rand()%100;
          cout<<ar[i][j]<<endl;
          }
    }
    for(int i=0;i<row;i++)
        cout<<ar[i]<<endl;
cout<<endl; 
//добавим элемент в конец массива
ar=function_add(ar,col,row);
 
cout<<endl;
//напечатаем массив
for(int i=0;i<row+1;i++)
    for(int j=0;j<col;j++)
    {
       cout<<ar[i][j]<<endl;
      }
//высвободим память
for(int i=0;i<row;i++)
    delete []ar[i];
delete[]ar;
 
return 0;
}
int **function_add(int **ar,int col,int row)
{  
    //сформируем временный массив
    int **temp=new int*[row+1];
    for(int i=0;i<row+1;i++)
        temp[i]=new int[col];
    for(int i=0;i<row+1;i++)
        {
            temp[i]=ar[i];
            if(i==row)temp[i]=ar[row-1]+1;
}
    //скопируем значения и выделим память под строку
    ar=temp;
      for(int i=0;i<row+1;i++)
        {   
            ar[i]=temp[i];
            if(i==row)ar[i]=new int[col];
            cout<<ar[i]<<endl;
}
   //вернем указатель
    return ar;
  //высвободим память временного массива
     for(int i=0;i<row+1;i++)
        delete []temp[i];
    delete[]temp;
}
Он выполняется, но высвобождение памяти в функции function_add находится после возврата значения указателя. Если же его расположить перед, то код не выполняется - ошибка происходит на этапе выполнения. Что не так в этом коде? Или же просто подскажите как добавить одну строку в динамический двумерный массив и чтобы высвобождение памяти также выполнялось.

А вот второй - но он также стопорится на этапе высвобождения памяти

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
55
56
57
58
59
60
#include <iostream>
#include <ctime>
using namespace std;
int *function_add(int *ar,const int col,int row);
int main()
{
//Написать функцию, добавляющую строку (одномерный массив) 
//в конец двухмерного массива.
 
//размерность двумерного массива
    int row=5;
    int const col=5;
//описание указателя
    int (*ar)[5];
//выделим память под массив
    ar=new int[row][col];
//заполним наш массив
    srand(time(NULL));
    for(int i=0;i<row;i++)
    {   cout<<endl;
        for(int j=0;j<col;j++)
        {
            ar[i][j]=rand()%100;
            cout<<ar[i][j]<<' ';
        }
    }
    cout<<endl;
 //дополним строкой массив
    function_add((*ar),col,row);
 
    delete[]ar;
 
return 0;
}
int *function_add(int *ar,const int col,int row)
{ 
    //добавим строку и заполним ее случайными числами
    srand(time(NULL));
    for(int i=0;i<row+1;i++)
    {
       cout<<endl;
       for(int j=0;j<col;j++)
       {
          if(i==row)
          {    
               *(ar+i*col+j)=rand()%100;
          }
          
       }
    }
    for(int i=0;i<row+1;i++)
    {
       cout<<endl;
       for(int j=0;j<col;j++)
       {
          cout<<*(ar+i*col+j)<<' ';
       }
    }
    return ar;
}
Я уже думал, что смогу за счет второго варианта кода решить эту задачу, но опять наткнулся на сложности с delete[];
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru