C++ C+中的初始化结构出错+;
我的代码中有这个结构。 代码的“可编译”部分:C++ C+中的初始化结构出错+;,c++,struct,structure,C++,Struct,Structure,我的代码中有这个结构。 代码的“可编译”部分: #define MONITOR_TOPKEY HKEY_LOCAL_MACHINE #define MONITOR_SUBKEY TEXT("SOFTWARE\\WMyRegistry") struct params { HKEY hMainKey; LPTSTR hSubKey; string path; bool* runflg; }; void _tmain(void) { bool work
#define MONITOR_TOPKEY HKEY_LOCAL_MACHINE
#define MONITOR_SUBKEY TEXT("SOFTWARE\\WMyRegistry")
struct params {
HKEY hMainKey;
LPTSTR hSubKey;
string path;
bool* runflg;
};
void _tmain(void) {
bool work = true;
string defaultPath = "HKEY_LOCAL_MACHINE";
defaultPath += "\\";
defaultPath += MONITOR_SUBKEY;
params* defaultParams = (params*) malloc(sizeof (params));
defaultParams->hMainKey = MONITOR_TOPKEY;
defaultParams->hSubKey = MONITOR_SUBKEY;
defaultParams->path = defaultPath; // HERE THERE IS A PROBLEM
defaultParams->runflg = &work;
}
当我设置所有参数(除“字符串”)时,所有参数都正常工作。
但是,当我尝试将'string'parametr(或其他类型而不是此类型,对于ex myClass类型或其他类型变量)初始化时,我出现了错误
"Unhandled exception at 0x0FDEEAD0 (msvcr110d.dll) in ConsoleApplication1.exe:
0xC0000005: Access violation when writing to the address 0xCDCDCDCD."
我不明白,为什么“defaultParams->path=defaultPath”不起作用。有人能解释一下吗 这里使用一个注册表类obj,它初始化值second obj, 如果不使用赋值运算符重载,则无法初始化obj。
首先,你应该让作业负担过重 我认为马洛克可能有问题。因为malloc只是为对象分配了一些内存。 代码中的字符串可能超出分配的内存边界。因此存在访问冲突
尝试使用新而不是Malc。< p>您在Mulalc上使用C++类STD:String:在中的字符串 malloc对构造函数一无所知,因此不会初始化字符串
使用新的/DELL,避免在C++程序
中使用MalC/C++/Melo/FL.params* defaultParams = new params;
或者最好
std::unique_ptr<params> defaultParams(new params);
std::unique_ptr defaultParams(新参数);
<代码> >我打赌,$>代码> Works/Cuff>是一个(非静态)局部变量……,IDK还有多少问题,但是 MalCube()/Cuth>在C++中不太好,它不调用构造函数。因此,一个看似简单的赋值可能会导致您的程序尝试释放垃圾……另外,请向我们展示一些实际失败的可编译代码。这个问题现在太抽象了。解释一下确切的问题。谢谢!你的建议也很有用