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

C++

Войти
Регистрация
Восстановить пароль
 
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
#1

Нюансы динамической памяти - C++

17.12.2009, 20:00. Просмотров 526. Ответов 0
Метки нет (Все метки)

вобщем у меня очень непонятная трабла. есть двумерный массив из объектов класса NET. в классе NET есть небольшой массив указателей на объекты класса Object. массив NET инициализируется так:

C++
1
2
3
4
5
6
NET** Object::net=new NET* [Object::NET_n];
for (int i=0;i<Object::NET_n;i++)
{
    Object::net[i]=new NET[100];
    for (int j=0;j<100;j++) Object::net[i][j]=NET (i-500,j);
}
конструкторы NET:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
NET::NET(float x,float y)
{
    int N=100;
    objs=new Object* [N];
    tcs=new tck* [N];
    n=0;
 
    a=new tck;
    b=new tck;
    c=new tck;
    d=new tck;
    
    a->reload (x,y,0,NULL);
    b->reload (x+1,y,0,NULL);
    c->reload (x+1,y+1,0,NULL);
    d->reload (x,y+1,0,NULL);
}

и черезвычайно странным образом получается, что строчки

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Object::net[500][99].objs==Object::net[500][1].objs;
    Object::net[500][97].objs==Object::net[500][1].objs;
    Object::net[500][99].objs==Object::net[500][3].objs;
    Object::net[500][57].objs==Object::net[500][1].objs;
    Object::net[500][99].objs[0]==Object::net[500][1].objs[0];
 
    Object::net[501][99].objs==Object::net[501][1].objs;
    Object::net[501][97].objs==Object::net[501][1].objs;
    Object::net[501][99].objs==Object::net[501][3].objs;
    Object::net[501][57].objs==Object::net[501][1].objs;
    Object::net[501][99].objs[0]==Object::net[501][1].objs[0];
 
 
    Object::net[501][99].objs!=Object::net[500][99].objs;
    Object::net[501][99].objs!=Object::net[500][1].objs;
    Object::net[501][99].objs!=Object::net[501][98].objs;
и им подобные возвращаю true. то есть все ссылки на экземпляры класса Object, находящиесе в экземпляре класса NET в нечетных строчках каждого столбца почемуто все указывают на одну и ту жеобласть памяти (в каждом столбце соответственно) например:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Object::net[500][99].objs==0x06a80248;
Object::net[500][97].objs==0x06a80248;
Object::net[500][57].objs==0x06a80248;
Object::net[500][1].objs ==0x06a80248;
Object::net[500][3].objs ==0x06a80248;
 
 
Object::net[501][99].objs==0x06aad608;
Object::net[501][97].objs==0x06aad608;
Object::net[501][57].objs==0x06aad608;
Object::net[501][1].objs ==0x06aad608;
Object::net[501][3].objs ==0x06aad608;
 
Object::net[501][2].objs ==0x06aadd28;
если чото непонятно спрашивайте... главное проявите внимание очень нужно решение этой проблемы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2009, 20:00     Нюансы динамической памяти
Посмотрите здесь:

C++ Матрица в динамической памяти
C++ Вопрос по динамической памяти
перераспределение динамической памяти C++
C++ Массив в динамической памяти
C++ Массив в динамической памяти
Выделение динамической памяти C++ C++
одкладка динамической памяти C++ Linux
Нюансы выделения и освобождения памяти (структуры) C++
Нюансы обучения: желание учесть все нюансы - корректность кода или overengineering? C++
Удаление new из динамической памяти C++
C++ Освобождение динамической памяти в vs
C++ Освобождение динамической памяти

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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