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

Can't access the memory which was malloc() in DLL

亲爱的,

最近我运行陷入了一个普遍的问题,我正在写一个DLL,它将被另一个程序used/invoked。它有这样的结构:

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_Get() 并在中间传递 AMI_dll_memory,但是一旦我尝试访问“mem->submem->init()”的数据“n->data”。为什么呢?我确认我可以申请内存,因为 malloc 函数成功返回,但就是无法访问 n->data,有人知道这是为什么吗? n->内存传入函数后数据不属于当前进程?非常感谢。

伙计们,

我弄明白这是怎么回事了,它与malloc()函数的隐式声明有关,当我在第二个地方malloc内存时,我没有在那个文件中包含stdlib.h,这导致问题。