беззнаковый символ inbuf [1024000] выбрасывает EXEC_BAD_ACCESS

Я разрабатываю приложение для iOS с последним SDK.

Это приложение имеет несколько классов C ++.

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

Это часть класса C ++.

#ifdef __APPLE__
const char* path = jFileName ;
const char* tempPath =  jTempFileName ;

const char* truckPath = jTruckFileName;
const char* truckTempPath = jTruckTempFileName;
#endif

MyFunction(path,tempPath);

На MyFunction(path,tempPath);, path а также tempPath имеет действительное значение.

Но я получаю ошибку здесь:

void MyFunction(const char* inFileName, const char* outFileName)
{
[ ... ]
unsigned char inbuf[1024000], outbuf[1024000];

[ ... ]
}

Добавляя комментарии я обнаружил, что ошибка здесь: unsigned char inbuf[1024000], outbuf[1024000]; когда у функции есть только эта строка.

Эта ошибка появляется только на устройстве.

Как я могу узнать, где проблема?

1

Решение

Ваш стек не такой большой:

 unsigned char inbuf[1024000], outbuf[1024000];

вместо этого используйте выделение кучи:

std::vector<unsigned char> inbuf(1024000, 0), outbuf(1024000, 0);

или разделите вашу работу так, чтобы можно было использовать меньший буфер стека.


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

2

Другие решения

Отвечать за

Как я могу узнать, где проблема?

попробуйте отладку с Точка останова включена.

  1. Перейти к навигатору точки останова
  2. нажмите на знак «+»
  3. нажмите Добавить точку останова исключения
  4. нажмите «Готово»

Также попробуйте отладку с включенными объектами зомби. Для этого перейдите к Продукт-> Редактировать схему и проверить «Включить зомби-объект«

1

По вопросам рекламы [email protected]