У меня есть код на c ++, который пытается динамически выделить 2d массив байтов размером примерно 151 МБ. Когда я пытаюсь вернуться назад и проиндексировать массив, моя программа каждый раз вылетает в одном и том же месте с ошибкой «Ошибка чтения места доступа 0x0110f000», но индикаторы находятся в диапазоне. Это заставляет меня поверить, что память на этих признаках была распределена неправильно.
1) Какое максимальное количество байтов вы можете динамически выделить с помощью оператора new?
2) Если это случай, когда мне не удается динамически распределить память, имеет ли смысл, что мой код дает сбой при попытке доступа к массиву с точно одинаковыми двумя индикаторами каждый раз? Почему-то я чувствую, что они будут отличаться при каждом запуске программы, но что я знаю;)
3) Если вы не думаете, что проблема связана с неудачным вызовом нового, есть какие-либо другие идеи, которые могут быть причиной этой ошибки и сбоя?
Заранее спасибо за вашу помощь!
* Edit
Вот мой код для выделения 2d массива ...
#define HD_WIDTH 960
#define HD_HEIGHT 540
#define HD_FRAMES 100
//pHDVideo is a char**
pHDVideo->VideoData = new char* [HD_FRAMES];
for(int iFrame = 0; iFrame < HD_FRAMES; iFrame++)
{
//Create the new HD frame
pHDVideo->VideoData[iFrame] = new char[HD_WIDTH * HD_HEIGHT * 3];
memset(pHDVideo->VideoData[iFrame], 0, HD_WIDTH * HD_HEIGHT * 3);
}
и вот скриншот кода сбоя и отладчика (Dead Link), это поможет.
Я должен добавить, что вызов memset никогда не прерывается, что для меня означает, что распределение прошло успешно, но я могу ошибаться.
EDIT
Я нашел решение всем, спасибо за вашу помощь. Каким-то образом, и мне все еще нужно выяснить, как была увеличена одна горизонтальная линия, поэтому я изменился ...
for(int iHeight = 0; iHeight < HD_HEIGHT; iHeight++)
до
for(int iHeight = 0; iHeight < HD_HEIGHT-1; iHeight++)
и это вдруг сработало. В любом случае, большое спасибо еще раз!