为什么在 DLL 中 malloc() 的内存出现 access violation
各位大佬:最近遇到一个问题,在开发 DLL 时,在其中 malloc() 了内存,但是访问时出现 access violation,想求教各位大佬这个原因可能是什么?
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.
}DLL 会被其他程序调用,第一次是调用 AMI_Init() 初始化一部分内存,并且将内存的首地址传递给参数 AMI_dll_memory,然后会调用 AMI_Get(),这时我在 AMI_Get() 中的 init() 函数上 malloc() 了一个新的节点,但是这里直接出现了 access violation,我想不明白是为什么。想求教各位大佬这是为什么?我确定这个 list n 的节点 malloc() 成功了,但是当我尝试访问时,出现 access violation,十分感谢各位指教。
调试,判断n是否为空? 你给出的信息相对有限,而且程序也是错的,所以通常没有办法准确判断。
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.
}
就这,list 是一个变量,你确定 struct list 是合法的并且这段代码能通过编译? 我觉得鼠侠的意思是,这段代码是在把油门当作刹车踩,因此不能以此为证据说明刹车有问题。
而我想刹车或许是好的,或许有问题,或许...好吧,我没见过那辆车。
页:
[1]