结构体指针的初始化和内存回收

cky77 2019-05-07 06:42:35
主函数里面初始化了一个结构体指针,当做一个线程的参数传递。我该在哪里清理这个内存呢?
线程是传文件的线程,不知道啥时候传完。
这个结构体指针应该定义在哪里,在哪里清理?
...全文
401 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lunatic7 2019-05-11
  • 打赏
  • 举报
回复
MyFtp* pFtp;
pParam1->pFtp = pFtp;

这个指针指向的是你的pFtp的地址

pParam1->pFtp=new pFtp;
这样才需要在结构体内释放

sevancheng 2019-05-09
  • 打赏
  • 举报
回复
在结构体里加构造函数、析构函数呗,或者直接用对象,不用指针
cky77 2019-05-08
  • 打赏
  • 举报
回复
两位哥哥,我补充一下哈。

typedef struct
{
MyFtp* pFtp;
CString selectFilePath;
CString selectFileName;
CString ftpFilePath;
}pTranParam;
pTranParam *pParam1 = new pTranParam;


button按钮函数里创建线程
 pParam1->pFtp = pFtp;
pParam1->ftpFilePath = ftpFilePath;
pParam1->selectFileName = selectFileName;
pParam1->selectFilePath = selectFilePath;

CWinThread* MyThread = AfxBeginThread(MyThreadFunction, pParam1, THREAD_PRIORITY_NORMAL, 0, 0, NULL);


线程函数
UINT MyThreadFunction(LPVOID pParam)
{
pTranParam *pParam1 = (pTranParam*)pParam;
pParam1->pFtp->FtpTransProcUp(pParam1->selectFilePath, pParam1->selectFileName, pParam1->ftpFilePath);
}


然后工作函数
bool MyFtp::FtpTransProcUp(const CString &selectFilePath, const CString &selectFileName, const CString& m_ftpPath)
{}


我现在结构体指针是在窗口类cpp声明的全局变量。然后销毁是在窗口的onclose()里面。但是我感觉这样好low..应该怎么弄会标准一些。
版主大哥 2019-05-07
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
同一个进程中的 谁释放 关系不是很大, 但是记得释放完了置NULL, 用的时候先判断是否有效, 否则容易造成访问冲突奔溃
传进子线程的指针在子线程内释放置空,在主线程中使用照样崩
zgl7903 2019-05-07
  • 打赏
  • 举报
回复
同一个进程中的 谁释放 关系不是很大, 但是记得释放完了置NULL, 用的时候先判断是否有效, 否则容易造成访问冲突奔溃
版主大哥 2019-05-07
  • 打赏
  • 举报
回复
指针一般是谁用谁回收。 所以就在主函数回收,至于不知道传文件线程什么时候传完,可以等待传文件线程结束的信号再回收指针

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧