C/C++指针无关联,因为它指向已销毁的实例
一、概述
在使用Qt+OpenCV做项目的过程中,发现一个问题。
指针无关联,因为它指向已销毁的实例
产生这个问题的代码如下:
const char* GLSquareWindow::readFileToString(QString resPath) { QFile vertexShaderFile(resPath); if (!vertexShaderFile.open(QIODevice::ReadOnly)) { qDebug() << "Cannot open vertex shader file for reading"; } QString qStr = vertexShaderFile.readAll(); vertexShaderFile.flush(); vertexShaderFile.close(); std::string stdStr = qStr.toStdString(); const char* charStr = stdStr.c_str(); return charStr; }
上述代码想要拿到一个const char* 类型的字符数组。
在其他方法中调用此方法,返回的字符数组是乱码。(浮空指针)
二、解决办法
方法1:
ps:我现在用的
不用这个封装方法,哪里用到就在那里调用。且是分步调用。
QFile vertexShaderFile(":/QtForOpenCV4Tool/shader/square.vert"); if (!vertexShaderFile.open(QIODevice::ReadOnly)) { qDebug() << "Cannot open vertex shader file for reading"; } QString verQStr = vertexShaderFile.readAll(); std::string verStdStr = verQStr.toStdString(); const char* vertexStr = verStdStr.c_str(); //const char* vertexStr = readFileToString(":/QtForOpenCV4Tool/shader/square.vert"); qDebug() << "vertexStr-------------" << vertexStr;
方法2:
还是封装方法,把最后一步
const char* vertexStr = verStdStr.c_str();
自己手动开辟一块内存,存储,使用后可以销毁。
ps:思路是可行了,我做了验证,数据是出来了,但是后面会填充空字符或空格。如果业务不需要精确可以使用。如果业务上必须和文件中的一致则慎用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2013-08-13 将myeclipse中不适用的插件禁用掉