举报

求教,在visual studio上可能是应malloc缺陷导致的“访问冲突”问题

0

在windows,2022版visual studio上,使用 默认(ISO C++14 标准)、默认(ISO C++14 标准) 的C/C++语言。

大概率是以下代码的问题

// 定义函数指针类型
typedef void (*Func)(Unit*);

//定义画图函数指针数组;
extern Func _drawFunc[100] = { NULL };

Func drawFuncP;
drawFuncP = _drawFunc[unit->type.shape]; // 获取画图函数指针
drawFuncP(unit); // 调用画图函数

unit->type.str = (wchar_t*)malloc(sizeof(str));

在某一次运行到这一行时

unit->type.str = (wchar_t*)malloc(sizeof(str));

 位于_drawFunc[1]的函数指针突然变化

原本内容由 0x00007ff6fa8f100a  突然变成 0x000002502a727e60

造成执行以下代码时出现访问冲突,

drawFuncP = _drawFunc[unit->type.shape]; // 获取画图函数指针
drawFuncP(unit); // 调用画图函数

编译器报错:

0x000002502A727E60 处(位于 旅游信息管理系统.exe 中)引发的异常: 0xC0000005: 执行位置 0x000002502A727E60 时发生访问冲突。

unit->type.str的类型是wchar_t*

_drawFunc[1]的类型是void(*) (unit*),

实在想象不出有什么关联

请问这个情况的原因是什么?该怎么解决呢?

ava
123

2025-1-3

举报
0

变量作用域没有控制好吧,内存被 malloc 重新分配了

ava
xiongfj ◑◑

2025-1-8

技术讨论社区