Funktion gibt den BYTE-array
Möchte ich meine Funktion zur Rückgabe eines BYTE-array. Die Funktion ist wie folgt.
BYTE sendRecieveData(BYTE control, unsigned int value){
//Open connection to LAC
HANDLE LACOutpipe;
HANDLE LACInpipe;
LACOutpipe=openConnection(MP_WRITE);
LACInpipe=openConnection(MP_READ);
//declare variables
BYTE bufDataOut[3];
BYTE bufDataIn[3];
DWORD bufInProcess;
DWORD bufOutProcess;
//sets CONTROL
bufDataOut[0]=control;
//sets DATA to be sent to LAC
BYTE low_byte = 0xff & value;
BYTE high_byte = value >> 8;
bufDataOut[1]=low_byte;
bufDataOut[2]=high_byte;
MPUSBWrite(LACOutpipe,bufDataOut,3,&bufOutProcess,1000);
MPUSBRead(LACInpipe,bufDataIn,3,&bufInProcess,1000);
MPUSBClose(LACOutpipe);
MPUSBClose(LACInpipe);
return bufDataIn[3];
}
Es nicht wieder ein byte-array und wenn ich BYTE
zu BYTE[]
oder BYTE[3]
es gibt mir eine Fehlermeldung.
InformationsquelleAutor moesef | 2012-02-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
return bufDataIn[3];
bedeutet "return 4. element vonbufDataIn
array" und in diesem Fall führt es zu undefinierten Verhalten, da die Größe des Arrays ist 3.Können Sie Speicher für diese neue Reihe in den Körper Ihrer Funktion und return Zeiger auf sein erstes element:
Vergessen Sie nicht
delete
es, wenn Sie fertig sind mit es:Sogar besser, verwenden
std::vector<BYTE>
und loszuwerden, diese hässlichen Speicher-management mit; -) Dies sorgt dafür, dass der Speicher ordnungsgemäß freigegeben, auf jedem Rückweg, auch wenn Ausnahmen geworfen werden.Behoben. Danke.
InformationsquelleAutor LihO
Da das array ist relativ klein, ich würde empfehlen, übergeben Sie den Puffer als Funktion argument.
Nun, man wird verwenden Sie diese Funktion wie folgt:
Diese Weise können Sie vermeiden, die Verwendung von dynamic memory allocation und machen Sie Ihren code sicherer zu machen.
InformationsquelleAutor Igor Chornous