c++ - 如何为结构成员分配其他函数返回的值?

标签 c++ multithreading struct

我正在尝试制作一个多线程程序。
我可以编译成功,但我的程序总是崩溃。

这是我的代码片段:

// 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 中.如果是这种情况,请更改 szFileNamestd::string而不是 char * .

关于c++ - 如何为结构成员分配其他函数返回的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13846064/

相关文章:

c++ - 输出错误 Project Euler 50

python - concurrent.futures 中的 RSS 内存使用情况

无法在 C 中为 png 创建结构

c++ - 从重载模板函数中进行选择的规则是什么?

c++ - 线程安全有界队列在 Boost 1.54 中挂起

java - 为什么要在 SynchronizedMap 或 SynchronizedCollections 上同步?

java - Java中线程的空闲时间是什么意思?

c - 解决 valgrind 中的无效写入错误

编译器: "error: dereferencing pointer to incomplete type" in thread application

c++ - C++中的运行时类型转换,如何?