【发布时间】:2011-07-26 11:35:36
【问题描述】:
我正在尝试在代码块(在 mingw 下使用 GCC)中使用 Visual Studio 2008 SP1 创建的 dll(启用公共语言运行时支持)。传递给 dll 的一些参数已由调用函数动态分配。我的问题是:
“传递给 dll 的参数能否驻留在调用函数的堆上。这样做安全吗?”
从 dll 返回时,调用函数的堆栈已损坏,并且在尝试访问这些堆栈时,当我尝试调试此问题时,我在代码块中得到一个 SIGTRAP。
这可能是什么原因?
dll函数的原型是这样的:
int __cdecl myTesseractOCR(myOCRData* labels_for_ocr);
myOCRDaata 定义如下:
typedef struct __ocr_data
{
char* arr_image [NUMOBJ_LIMIT_HIGH];
int start_x [NUMOBJ_LIMIT_HIGH];
int start_y [NUMOBJ_LIMIT_HIGH];
int width [NUMOBJ_LIMIT_HIGH];
int height [NUMOBJ_LIMIT_HIGH];
int widthstep [NUMOBJ_LIMIT_HIGH];
char number_plate_buff [2*NUMOBJ_LIMIT_HIGH];
int ocr_label_count;
} myOCRData;
arr_image 指向驻留在调用函数堆上的数据,而上述结构的所有其他成员都驻留在调用函数的堆栈上。驻留在堆栈上的所有这些成员都会损坏,程序会生成一个 SIGTRAP。我已经看到在 stackoverflow 的各个线程中都在讨论这些问题,但还没有找到具体的解决方案。
【问题讨论】:
标签: c visual-studio-2008 gcc