[問題] std::list 陣列

作者: hardware (哈味)   2015-06-03 15:56:53
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
g++ Linux
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <iostream>
#include <cstring>
#include <list>
using namespace std;
#define BUFFERSIZE 1024
class receivebuffer_0{
public:
unsigned char *payload;
int NALU;
receivebuffer_0() // Constructor
{
payload = new unsigned char[BUFFERSIZE];
NALU = 0;
}
};
int main() {
list<receivebuffer_0> WiFi;
receivebuffer_0 data;
size_t payloadLength = 100;
unsigned char payloadIndex[payloadLength];
payloadIndex[0] = 254;
payloadIndex[1] = 30;
data.NALU = 1;
cout<< (int)payloadIndex[0]<<endl; // output 254 OK
memcpy(data.payload , payloadIndex, 2);
WiFi.push_back(data);
payloadIndex[0] = 40;
payloadIndex[1] = 45;
data.NALU = 12333;
memcpy(data.payload , payloadIndex, 2);
WiFi.push_back(data);
cout<<(int)WiFi.front().payload[0]<<endl;
//output 40 .... should output 254
cout<<WiFi.front().NALU<<endl; // output 1
WiFi.pop_front();
cout<<(int)WiFi.front().payload[0]<<endl; // output 40
cout<<WiFi.front().NALU<<endl; // output 12333
return 0;
}
補充說明(Supplement):
我應該要如何修正呢?
另外為什麼不能
cout<<(int)WiFi.front().payload;
這樣不是可以印出 payload這陣列所有元素的值嗎?
謝謝
作者: Feis (永遠睡不著 @@)   2015-06-03 16:08:00
http://goo.gl/y4QoN1如果你不知道怎麼辦的話, 把 payload 改成陣列就好FYI: http://ideone.com/a0s6FX此外, 你為什麼覺得 cout 可以直接印出陣列的所有值呢除非你打算把它當字串印, 只是他又不是真的字串?
作者: anyoiuo   2015-06-03 16:41:00
問題出在Shallow copy寫個copy constructor就好了http://ideone.com/72G1K3
作者: Feis (永遠睡不著 @@)   2015-06-03 16:43:00
只寫個 copy constructor 可能不夠對.
作者: anyoiuo   2015-06-03 16:46:00
預設的copy constructor是Shallow copy,只有欄位複製
作者: Feis (永遠睡不著 @@)   2015-06-03 16:46:00
請參閱一樓連結. 你還需要實作其他好朋友們才不會有後遺症基本上一個只有 new 沒有 delete 的類別是很奇特的
作者: anyoiuo   2015-06-03 16:49:00
恩,我知道move constructor,在當return時會遇到(效能
作者: hardware (哈味)   2015-06-03 16:49:00
感謝 anyoiuo ~
作者: hardware (哈味)   2015-06-03 16:50:00
感謝 Feis
作者: anyoiuo   2015-06-03 16:50:00
有new就要有delete,所以要寫destructor他忘了吧XD
作者: Feis (永遠睡不著 @@)   2015-06-03 16:50:00
我不是這意思. 算了. forget it阿. 我是這意思 (跳針)不過就這個實作來看, payload 需要是指標的意義不明畢竟陣列是固定大小.又沒有要作分享. 建議 hardware 再想想

Links booklink

Contact Us: admin [ a t ] ucptt.com