Ошибка кучи в C ++ - PullRequest
       15

Ошибка кучи в C ++

1 голос
/ 13 мая 2010

Я начинающий программист на C ++. В последнее время я работаю над обработкой изображений с использованием C ++.

но у меня есть проблема, которую я хочу спросить. Предположим, у меня есть следующий код:

for (int i=0;i<100000;i++)
{
  int * a = new int[10000];
  //do something
  delete [] a;
}

Когда я выполняю этот код, я получаю сообщение об ошибке во время выполнения, ошибка кучи ...

Что-то не так с этим кодом, я имею в виду, можно ли выделить память и освободить ее в том же цикле?

Заранее спасибо ...

Ответы [ 3 ]

5 голосов
/ 13 мая 2010

Возможно, ошибка в коде, который вы не показываете. Вы также можете переписать код так:

int * a = new int[10000];
for (int i=0;i<100000;i++)
{
  //do something
}
delete [] a;

, который, если ничего не будет, будет гораздо более эффективным. А так как это C ++, вы также можете рассмотреть:

vector <int> a( 10000 );
for (int i=0;i<100000;i++)
{
  //do something
}
1 голос
/ 13 мая 2010

Проблема, скорее всего, в «сделай что-нибудь». Скорее всего, вы пишете вне массива, и это приводит к повреждению кучи.

За исключением того, что выделение и освобождение памяти в одной и той же итерации цикла - это нормально, но не имеет большого смысла - поскольку число элементов является постоянным, вы также можете выделить его до цикла и освободить после цикла.

0 голосов
/ 13 мая 2010

Код между новым и удаленным, вероятно, перезаписывает часть памяти до или после выделенной памяти. Это называется перезаписью памяти (переполнением или переполнением).

Проверьте код, чтобы узнать, не случайно ли вы, например, пишите по индексу 10001 (или даже 10000 неверно). Максимальный индекс 9999.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...