函数返回字符串变量的有关问题
函数返回字符串变量的问题
大致是这么一段代码,从数据库里查询一个数据然后返回,返回值是void*,如果返回常量当然OK,返回变量就会出现临时变量被销毁,地址内容为乱码的情况,请问该如何解决呢?谢了
------解决方案--------------------
1 动态分配内存吧!传双指针(指针本身的地址)进来,通过动态获取数据长度后,
再分配内存大小,然后再拷贝数据!
2 提前定义一块很大的内存空间!直接传地址进来拷贝数据
------解决方案--------------------
应该不会,及时free掉就没问题了。还有哪里调用的就在哪里free掉咯,如果再延长到其他函数里,就说不清了,只会使管理更加混乱。
void *FieldServer::sqlQueryFunction(const unsigned short &majorCmd,const unsigned short &minorCmd,const void* inputStr)const
{
void *pTemp;
QSqlQuery m_Query;
QString strSql=QString((char*)(inputStr));
m_Query.exec(strSql);
if (m_Query.next())
{
//std::string str = m_Query.value(0).toString().toStdString();
//const char* ch = str.c_str();
//pTemp = (void *)ch;// &m_Query.value(0).toString();
/*char* ch;
QString str = m_Query.value(0).toString();
QByteArray ba = str.toLatin1();
ch=ba.data();
pTemp =(void *) ch;*/
QString str = m_Query.value(0).toString();
QByteArray ba = str.toLatin1();
pTemp = "123";//(void *)ba.data();
}
return pTemp;
}
大致是这么一段代码,从数据库里查询一个数据然后返回,返回值是void*,如果返回常量当然OK,返回变量就会出现临时变量被销毁,地址内容为乱码的情况,请问该如何解决呢?谢了
------解决方案--------------------
1 动态分配内存吧!传双指针(指针本身的地址)进来,通过动态获取数据长度后,
再分配内存大小,然后再拷贝数据!
2 提前定义一块很大的内存空间!直接传地址进来拷贝数据
------解决方案--------------------
现在就按照前面的作法,把指针的地址传进去,再在调用了之后free掉,这样产生的新的问题就是,我在sqlQueryFunction里面去malloc的空间,在调用sqlQueryFunction的函数里面free,会不会造成泄漏?
对方的要求就是我能得到一个存放数据的指针,类型为void*,我没法修改这一块,就只能做数据库读取的部分内容,就这样,分配的任务是这样我也没法去改不是……
这个就不知道了,传回指针的时候,必须保证这个指针是有效的,你取到的数据100%是局部的,那就只能malloc一块内存,然后把数据拷贝到这个指针上返回。但这样就要引起内存管理的问题,这个要协商好,必须及时释放资源。或者可以要求对方提前开辟一块足够大的空间给你,malloc既然在他哪里,free也在他那里,就没你的事了。
应该不会,及时free掉就没问题了。还有哪里调用的就在哪里free掉咯,如果再延长到其他函数里,就说不清了,只会使管理更加混乱。