【发布时间】:2011-08-22 13:25:42
【问题描述】:
我正在开发一个为主应用程序分配一个数组的 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;
}
我希望,当我以 NULL 作为参数调用 foo 时,它会返回 1。不是真的!它会生成一个异常。
问题 2:为什么 DLL 中的 try-catch 块不起作用?
谢谢大家!
P.S.:直接在 main 中使用 try-catch 生成相同的异常不会生成异常(或者更好的是,它由 try-catch 块正确处理)。
【问题讨论】:
-
你为什么不做一个 if(!arrayPtr) 检查?此外,如果出现异常,您的代码会泄漏分配的数组,因为您没有删除它...
标签: c++ exception dll try-catch