我正在尝试制作一个多线程程序。
我可以成功编译它,但是我的程序总是崩溃。
这是我的代码片段:
// in global declaration
typedef struct MyData {
int nSumber;
char *szFileName;
} MYDATA, *PMYDATA;
PMYDATA pData[MAX_THREAD];
// in my OpenDialog function
OPENFILENAME ofn;
char szFile[MAX_PATH];
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
if(GetOpenFileName(&ofn))
// I think this line that makes my program crash
pData[0]->szFileName = ofn.lpstrFile;
我做错了吗?
提前致谢!
最佳答案
pData
数组包含指向MYDATA
的指针,这些指针未指向有效内存,因为您尚未分配任何内存。
if(GetOpenFileName(&ofn)) {
pData[0] = new MYDATA();
pData[0]->szFileName = ofn.lpstrFile;
}
现在,您需要在每个分配的
delete
元素上调用pData
来释放内存。因此,请使用
std::vector<MYDATA>
而不是解决所有麻烦。std::vector<MYDATA> dataVec;
// ...
if(GetOpenFileName(&ofn)) {
MYDATA data;
data.szFileName = ofn.lpstrFile;
data.nSumber = something; // you probably want to init this also
dataVec.push_back(data);
}
我不确定
szFileName
是char *
并只是将其指向ofn.lpstrFile
。您可能需要分配内存并将文件名存储在struct
中。如果是这种情况,请将szFileName
更改为std::string
而不是char *
。