Qt Creator4.5とGCC4.3を使用していますが、 QtまたはC ++に関連するかどうかわからないという次の問題がありchar *
ます。入力パラメーターとして、を使用して関数を呼び出します。その関数内で動的割り当てを行い、アドレスをに割り当てます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()
。なんで?
..。
OK thx私は私の間違いを理解しています(ルーキーの間違い:()。関数への入力パラメーターとしてポインターを送信するときは、データのアドレスを送信しますが、ポインターのアドレスは送信しないため、ポインターを別の場所にポイントすることはできません...これは実際には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;
}