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

Динамические массивы - C++

Восстановить пароль Регистрация
 
Анна :)
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
07.06.2010, 08:29     Динамические массивы #1
Если у меня есть 2 двумерных динамических массива один х1 размерностью m*n, а другой х2 размерностью m*(n+1), то что происходит с ними когда я пишу оператор присваивания x1 = x2; ?!
И еще вопрос: что такое потерянная ссылка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2010, 08:29     Динамические массивы
Посмотрите здесь:

Динамические массивы. C++
Динамические массивы. C++
Динамические массивы и функции. Динамические массивы. C++
Динамические массивы C++
Динамические массивы. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
07.06.2010, 08:52     Динамические массивы #2
Смотря как реализуете массивы.
Если так:

const int n = 5,
m = 5;
int array1[m][n], array2[m][n+1];

то при array1 = array2 должна произойти ошибка
Анна :)
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
07.06.2010, 09:03  [ТС]     Динамические массивы #3
Ну это да, но у меня массивы задаются так:
C++
1
2
3
4
5
6
7
8
9
int **x1 = new int * [m];
    for (int i=0;i<m;i++)
        temp[i] = new int [n];
 
int **x2 = new int * [m];
    for (int i=0;i<m;i++)
        temp[i] = new int [n+1];
// тут должна быть инициализация массивов числами, а потом:
x1 = x2;
Если так делать, то никаких ошибок не выходит, но что конкретно происходит в программе?
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
07.06.2010, 09:11     Динамические массивы #4
Цитата Сообщение от Анна :) Посмотреть сообщение
x1 = x2;
Тут Вы просто присвоете одному указателю значение другого. В итоге потеряете указатель на выделенную память x1.
С точки зрения компилятора все нормально.

Добавлено через 1 минуту
Код как то не запутанно написан.
Вы создаете массив указателей. А не массив с данными

Добавлено через 1 минуту
Код как то не запутанно написан.
Ссори думал одно написал другое. Сплю еще. Понедельник.

Добавлено через 44 секунды
Вам я так понимаю нужна работа с матрицами?
Анна :)
0 / 0 / 0
Регистрация: 18.05.2010
Сообщений: 15
07.06.2010, 09:43  [ТС]     Динамические массивы #5
Да мне как раз и надо, чтоб значения массива х1 стали значениями из массива х2. Но надо ли мне перед тем как присвоить х1=х2, нужно ли сделать:
f
C++
1
2
3
for (int i=0; i<m; i++)
    delete x[i];
    delete x;
?
Ведь размерности массивов разные. Не будет ли там никаких проблем с памятью?
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
07.06.2010, 11:40     Динамические массивы #6
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
//Это размерности массивов mxn1 и mxn2
const int m = 5,
             n1 = 5,
             n2 = 6;
 
int array1[m*n1], array2[m*n2];
 
#include <stdlib.h>
//Функция заполнения массива случайными числами
void InitArray(int *arr, int col, int row)
{
int i, j;
 
    for( i = 0;, i<col;i++)
         for(j=0;j<row;j++)
              arr[i*row+j] = rand();   
}
 
//Функция присваивает элементы первого массива второму
void CopyArray(int* arr1, int *arr2, //массивы
                     int col1, int row1, //параметры первого массива m и n
                     int col2, int row2) //параметры второго массива
{
int i1, j1;
int i2, j2;
 
     for (i1=0, i2 =0 ; i1<col1, i2<col2; i1++, i2++)
        for (j1=0, j2=0 ; j1<row1, j2<row2; j1++, j2++)
             arr1[i1*row1+j1] = arr2[i2*row2+j2];    
}
 
int main(int argc, char* arcv[])
{
   //Запоняем 1-й массив
   InitArray(array1, m, n1);
   //Запоняем второй
   InitArray(array2, m, n2);
   //Копирум array2 в array1
  CopyArray(array1, array2, m, n1, m, n2);
 
 return 0;
};
То что Вы хотите сделать скопировать содержимое одного массива в другой.

На этот счет почитайте любую книгу для начинающего С++ тама есть работа с массивами

Добавлено через 3 минуты
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
//Это размерности массивов mxn1 и mxn2
const int m = 5,
             n1 = 5,
             n2 = 6;
 
//int array1[m*n1], array2[m*n2];
int *array1, *array2;
 
#include <stdlib.h>
//Функция заполнения массива случайными числами
void InitArray(int *arr, int col, int row)
{
int i, j;
 
    for( i = 0;, i<col;i++)
         for(j=0;j<row;j++)
              arr[i*row+j] = rand();   
}
 
//Функция присваивает элементы первого массива второму
void CopyArray(int* arr1, int *arr2, //массивы
                     int col1, int row1, //параметры первого массива m и n
                     int col2, int row2) //параметры второго массива
{
int i1, j1;
int i2, j2;
 
     for (i1=0, i2 =0 ; i1<col1, i2<col2; i1++, i2++)
        for (j1=0, j2=0 ; j1<row1, j2<row2; j1++, j2++)
             arr1[i1*row1+j1] = arr2[i2*row2+j2];    
}
 
int main(int argc, char* arcv[])
{
 
   array1 = new int[m*n1];
   array2 = new int[m*n2];
 
   //Запоняем 1-й массив
   InitArray(array1, m, n1);
   //Запоняем второй
   InitArray(array2, m, n2);
   //Копирум array2 в array1
  CopyArray(array1, array2, m, n1, m, n2);
 
  delete [] array1;
  delete [] array2;
 
 return 0;
};
Это при динамическом выделении памяти под массивы
Yandex
Объявления
07.06.2010, 11:40     Динамические массивы
Ответ Создать тему
Опции темы

Текущее время: 22:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru