Я разрабатываю C ++ DLL, которая выделяет массив для основного приложения.Функция возвращает код ошибки, а не указатель на новый созданный массив, поэтому адрес первого члена будет записан в параметре функции.Пример:
int foo(int** arrayPtr) {
int* array = new int[10];
*arrayPtr = array;
return 0;
}
Итак, в основном я вызываю функцию следующим образом:
int* myArray;
int ret;
ret = foo(&myArray);
Теперь myArray указывает на новый созданный массив.
ВОПРОС 1:Есть ли лучший способ сделать это?
Чем интереснее вопрос.Если я передаю NULL в качестве параметра для foo, я генерирую исключение нарушения прав доступа, потому что
*arrayPtr = array;
попытается записать в 0x00000.
Итак, я добавил блок try-catch
int foo(int** arrayPtr) {
int* array = new int[10];
try {
*arrayPtr = array;
} catch(...) {
return 1;
}
return 0;
}
Я ожидаю, что когда я вызову foo с NULL в качестве параметра, он вернет 1. Не верно!Он генерирует исключение.
ВОПРОС 2: Почему блок try-catch в DLL не работает?
Спасибо всем!
PS: использование try-catchгенерация того же исключения непосредственно в основном не генерирует исключение (или, что лучше, оно корректно обрабатывается блоком try-catch).