Перераспределение массива 3D дает ошибку сегментации

0

Я использую трехмерный массив. Я заявляю следующее:

int (*DoubleStride_StateTable)[255][255] = new int[StateTable_length][255][255];

и я освобождаю 3D-массив следующим образом:

for( int i = 0 ; i < 255 ; i++ )
{
    for( int j = 0 ; j < 255 ; j++ )
    {
        cout << i << " " << j << endl;
        delete[] DoubleStride_StateTable[i][j] ;
    }
    delete[] DoubleStride_StateTable[i] ;
}
delete[] DoubleStride_StateTable;

Цикл выполняется всего два раза, т.е.

i=0 j=0
i=0 j=1

и после этого возникают сбои сегментации

Я делаю правильное освобождение? Почему эта ошибка возникает?

  • 1
    Здесь не эксперт по C ++, но я думаю, что вы просто хотите delete[] DoubleStride_StateTable .
  • 2
    Сколько есть new ? Теперь , сколько delete -s есть?
Показать ещё 1 комментарий
Теги:
arrays

1 ответ

6
Лучший ответ

Ваша проблема заключается в том, что вы освобождаете вещи, которые не должны освобождать себя. (Или более конкретно: вы пытаетесь освободить часть выделенной памяти несколько раз.)

Основное правило: Если вы запрашиваете память, используя new один раз, то вы должны использовать только delete один раз, а также. То же самое верно для массивов: если вы используете new[] один раз, вы должны использовать только delete[] один раз.

Вам понадобится только линия

delete[] DoubleStride_StateTable;

чтобы освободить всю память, которая была зарезервирована в вашем объявлении.

Итерация по всем элементам/уровням и освобождению элементов так, как вы делали, необходима только тогда, когда вы создаете свой 3D-массив одинаково (создавая массив указателей, затем повторяя его и назначая другой уровень).

  • 0
    Спасибо, это работает..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню