У меня есть приложение для iOS, которое использует устаревший низкоуровневый код для манипулирования памятью с использованием указателей.Я отлаживаю проблему, когда несколько потоков вызывают одновременное выполнение нескольких копий этого кода для глобальных переменных и приводят к повреждению памяти при записи неверной длины или перезаписи данных.
Эффект в том, что длина буфера ниже может измениться.Я видел, как iOS выбрасывает EXC_BAD_ACCESS
или EXC_BREAKPOINT
в результате этих вызовов.
Мой вопрос: будет ли iOS всегда выдавать исключения, когда я неправильно использую memcpy
, или будет жаловаться только тогда, когда я пишу за пределами моей разрешенной памяти?
Другими словами, свободен ли мой кодповредить мою память и создать невидимые проблемы, не вызывая исключений, если только они не выходят за пределы выделенной памяти и не обращаются к освобожденной памяти?
NSData* buffer = ...
Byte *array = (Byte*)malloc(buffer.length);
memcpy(array, buffer.bytes, buffer.length);