无法访问 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,这导致问题。
亲爱的,
最近我运行陷入了一个普遍的问题,我正在写一个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,这导致问题。