我正在尝试制作一个多线程程序。
我可以编译成功,但我的程序总是崩溃。
这是我的代码片段:
// 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 *
.
关于c++ - 如何为结构成员分配其他函数返回的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13846064/