无法访问 DLL 中的 malloc() 内存



尊敬的

最近我遇到了一个一般性的问题,我正在编写一个DLL,它将被另一个程序使用/调用。它的结构是这样的:

DLLEXT long AMI_Init(void **AMI_dll_memory)
{
mem = (struct model_memory*)malloc(sizeof(struct model_memory));
mem->submem = (struct submem*)malloc(sizeof(struct submem));
......
*AMI_dll_memory = (void*)mem;
}
DLLEXT long AMI_Get(void *AMI_dll_memory)
{
....
mem = (struct model_memory*)AMI_dll_memory;
mem->submem->init(); 
} 
// Defined in submem module
struct {
int data;
struct list* next;
}list;
void init()
{
struct list* n;
n = (struct list*)malloc(sizeof(struct list));
// access n->data caused memory access violation.
}

另一个软件将首先调用AMI_Init((,然后调用AMI_Set((,并在其间传递AMI_dl_memory,但我在尝试访问数据时遇到了访问违规;n->数据";的";mem->submem->init((";。为什么?我确认我可以应用内存,因为malloc函数成功返回,但无法访问n->数据,有人知道为什么吗?n->内存传入函数后,数据不属于当前进程?非常感谢。

伙计们,

我弄清楚了这里发生了什么,它与malloc((函数的隐式声明有关,当我把内存放在第二位时,我没有在该文件中包含stdlib.h,这导致了问题。

最新更新