我正在将Qt Creator 4.5 与GCC 4.3 一起使用,我遇到了以下问题,我不确定Qt或 C++ 是否相关:我调用一个带有 achar *
作为输入参数的函数。在该函数内部,我进行了动态分配,并将地址分配给char *
. 问题是当函数返回时它不再指向这个地址。
bool FPSengine::putData (char CommandByte , int Index)
{
char *msgByte;
structSize=putDatagrams(CommandByte, Index, msgByte);
}
int FPSengine::putDatagrams (char CommandByte, int Index, char *msgByte)
{
int theSize;
switch ( CommandByte ) {
case (CHANGE_CONFIGURATION): {
theSize=sizeof(MsnConfigType);
msgByte=new char[theSize];
union MConfigUnion {
char cByte[sizeof(MsnConfigType)];
MsnConfigType m;
};
MConfigUnion * msnConfig=(MConfigUnion*)msgByte;
...Do some assignments. I verify and everything is OK.
}
}
return theSize;
}
当我返回指针时,它包含的地址与分配的地址完全不同putDatagrams()
。为什么?
...
好的,我理解我的错误(新手错误:()。当将指针作为输入参数发送给函数时,您发送数据的地址而不是指针的地址,因此您不能将指针指向其他地方......它实际上是像 Index 这样的本地副本。使用 char * 成功返回数据的唯一情况是在函数调用之前分配内存:
bool FPSengine::putData (char CommandByte , int Index)
{
char *msgByte;
msgByte=new char[sizeof(MsnConfigType)];
structSize=putDatagrams(CommandByte, Index, msgByte);
}
int FPSengine::putDatagrams (char CommandByte, int Index, char *msgByte)
{
int theSize;
switch ( CommandByte ) {
case (CHANGE_CONFIGURATION): {
theSize=sizeof(MsnConfigType);
union MConfigUnion {
char cByte[sizeof(MsnConfigType)];
MsnConfigType m;
};
MConfigUnion * msnConfig=(MConfigUnion*)msgByte;
...Do some assignments. I verify and everything is OK.
}
}
return theSize;
}