作者hardware (硬體)
看板C_and_CPP
標題[問題] std::list 陣列
時間Wed Jun 3 15:56:53 2015
開發平台(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這陣列所有元素的值嗎?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.117.164.19
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1433318216.A.A8B.html
→ Feis: 如果你不知道怎麼辦的話, 把 payload 改成陣列就好 06/03 16:18
→ Feis: 此外, 你為什麼覺得 cout 可以直接印出陣列的所有值呢 06/03 16:32
→ Feis: 除非你打算把它當字串印, 只是他又不是真的字串? 06/03 16:33
→ anyoiuo: 問題出在Shallow copy寫個copy constructor就好了 06/03 16:41
→ Feis: 只寫個 copy constructor 可能不夠對. 06/03 16:43
→ anyoiuo: 預設的copy constructor是Shallow copy,只有欄位複製 06/03 16:46
→ Feis: 請參閱一樓連結. 你還需要實作其他好朋友們才不會有後遺症 06/03 16:46
→ Feis: 基本上一個只有 new 沒有 delete 的類別是很奇特的 06/03 16:47
→ anyoiuo: 恩,我知道move constructor,在當return時會遇到(效能 06/03 16:49
→ hardware: 感謝 anyoiuo ~ 06/03 16:49
→ anyoiuo: 問題) 06/03 16:49
→ hardware: 感謝 Feis 06/03 16:50
→ anyoiuo: 有new就要有delete,所以要寫destructor他忘了吧XD 06/03 16:50
→ Feis: 我不是這意思. 算了. forget it 06/03 16:50
→ Feis: 阿. 我是這意思 (跳針) 06/03 16:51
→ Feis: 不過就這個實作來看, payload 需要是指標的意義不明 06/03 16:53
→ Feis: 畢竟陣列是固定大小. 06/03 16:53
→ Feis: 又沒有要作分享. 建議 hardware 再想想 06/03 16:53