динамический массив и классы
От: piero_  
Дата: 12.01.08 12:44
Оценка:
вот такой код, работает в моей программе:

int ** iii;
int i;
int n = 10;
iii = new int*[n];
for(i = 0; i < n; i++)
{
iii[i] = new int[n];
memset(iii[i],0, sizeof(int)*n);
}

когда я пытаюсь сделать процедуру для выделения памяти в моем классе,
class TCENS
{
...

int **Grid1;
void GetMemForGrid(int **Grid, int GridRange);

...
}

происходят ошибки в строке
iii = new int*[n];

в чем может быть дело??? спасибо
Re: динамический массив и классы
От: Анатолий Широков СССР  
Дата: 12.01.08 12:53
Оценка:
_> происходят ошибки в строке
_> iii = new int*[n];

_>в чем может быть дело??? спасибо


Какая ошибка? Покажите код воспроизводящий проблему.
Re[2]: динамический массив и классы
От: piero_  
Дата: 12.01.08 13:01
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:


_>> происходят ошибки в строке

_>> iii = new int*[n];

_>>в чем может быть дело??? спасибо


АШ>Какая ошибка? Покажите код воспроизводящий проблему.


код тот же самый, выполняется в основной программе нормально, а внутри класса — не работает ((((

void TCENS::GetMemForGrid(int ** pGrid, int GridRange2)
{
int i;
int Grid11[40][40];

int ** iii;
iii = new int*[10]; // ЗДЕСЬ ПРОИСХОДИТ ОШИБКА
for(i = 0; i < GridRange2; i++)
{
iii[i] = new int[GridRange2];
memset(iii[i],0, sizeof(int)*GridRange2);
}

Grid = iii;
};
Re[3]: динамический массив и классы
От: Анатолий Широков СССР  
Дата: 12.01.08 13:12
Оценка:
Какая ошибка?
Re[4]: динамический массив и классы
От: piero_  
Дата: 12.01.08 13:16
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Какая ошибка?


access valiation at ... write of adress
Re[3]: динамический массив и классы
От: dotidot Россия  
Дата: 12.01.08 13:51
Оценка:
Здравствуйте, piero_, Вы писали:

void TCENS::GetMemForGrid(int ** pGrid, int GridRange2)
{
 int i;
 int Grid11[40][40];
 int ** iii;
 iii = new int*[10];   // ЗДЕСЬ ПРОИСХОДИТ ОШИБКА
 for(i = 0; i < GridRange2; i++)
  {
    iii[i] = new int[GridRange2];
    memset(iii[i],0, sizeof(int)*GridRange2);
  }

  Grid = iii;
 };



оно вообще даже близко компилятьсо не должно. Работать кстати тоже. Уточните вопрос. Вернее поправьте хотя бы последнюю строчку и сигнатуру метода, а то pGrid наружи не поменяется.

PS хотя скорее всего просто что-то где-то напутали
Re: динамический массив и классы
От: dotidot Россия  
Дата: 12.01.08 13:52
Оценка:
Здравствуйте, piero_, Вы писали:

кстати для двумерных массивов лучше сделать обертку для std::vector<T> massiv(sizeX * sizeY) и не мучаться с ручным управлением памяти.
Re[3]: динамический массив и классы
От: Аноним  
Дата: 12.01.08 14:41
Оценка:
Здравствуйте, piero_, Вы писали:

_>код тот же самый, выполняется в основной программе нормально, а внутри класса — не работает ((((


_>void TCENS::GetMemForGrid(int ** pGrid, int GridRange2)

_>{
_> int i;
_> int Grid11[40][40];

_> int ** iii;

_> iii = new int*[10]; // ЗДЕСЬ ПРОИСХОДИТ ОШИБКА
_> for(i = 0; i < GridRange2; i++)
_> {
_> iii[i] = new int[GridRange2];
_> memset(iii[i],0, sizeof(int)*GridRange2);
_> }

_> Grid = iii;

_> };

Могу предположить — ошибка чтения/записи в память где то раньше по ходу выполнения программы.
Тогда, если этот код в программе(например "основная программа") выполняется до ошибки в работе с памятью — всё нормально. Если этот код выполняется после ошибки в работе с памятью("внутри класса"), тогда по стечению обстоятельств получаем ошибку AV в строке нормального кода.

В любом случае, посмотри на корректность работы с памятью. Работаешь в VS ? Под отладчиком, debug-конфигурацию, запускать пробовал ? Можно использовать DCRT ? Попробую какой-нибудь профайлер.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.