[問題] 請問CString這行為什麼會錯?

看板C_and_CPP (C/C++)作者 (Penpineapple-applepen)時間9年前 (2017/02/19 18:44), 編輯推噓5(507)
留言12則, 5人參與, 最新討論串1/1
我有個結構如下: typedef struct _SOCKET_INFORMATION { CHAR Buffer[DATA_BUFSIZE]; WSABUF DataBuf; SOCKET Socket; DWORD BytesSEND; DWORD BytesRECV; CString m_id; } SOCKET_INFORMATION, *LPSOCKET_INFORMATION; 函式定義如下: BOOL CreateSocketInformation(SOCKET s, CString str); BOOL CreateSocketInformation(SOCKET s, CString str) { LPSOCKET_INFORMATION SI; if ((SI = (LPSOCKET_INFORMATION)GlobalAlloc(GPTR, sizeof(SOCKET_INFORMATION))) == NULL) { printf("GlobalAlloc() failed with error %d\n", GetLastError()); return FALSE; } else printf("GlobalAlloc() for SOCKET_INFORMATION is OK!\n"); // Prepare SocketInfo structure for use SI->Socket = s; SI->BytesSEND = 0; SI->BytesRECV = 0; SI->m_id = str; //這行會當掉!! SocketArray[TotalSockets] = SI; TotalSockets++; return(TRUE); } 問題如下: 為何我在執行緒裡執行下面這函式 if (CreateSocketInformation(AcceptSocket, str_id) == FALSE) { printf("CreateSocketInformation(AcceptSocket) failed!\n"); return 1; } 它會當在SI->m_id = str; 只不過是單純設個CString字串,不明白怎麼試都會當= = 我只是在結構裡多加個id成員,目的是檢查登入的客戶id是否有重複 下面是原始的範例,我是拿它修改的 http://www.cnblogs.com/zzyoucan/p/5153898.html -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.229.46.157 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1487501082.A.593.html

02/19 18:56, , 1F
SI的記憶體位置不合法 沒有new出來
02/19 18:56, 1F

02/19 18:57, , 2F
不好意思 看錯
02/19 18:57, 2F

02/19 19:39, , 3F
因為 GlobalAlloc 沒有呼叫 ctor 當你複製的時候就會...
02/19 19:39, 3F

02/19 20:43, , 4F
GlobalAlloc配個記憶體而已,和字串給值也有關啊QQ
02/19 20:43, 4F

02/19 21:37, , 5F
主要是CString自己的建構子沒呼叫,狀態會不明吧
02/19 21:37, 5F

02/19 21:38, , 6F
改用new的話大概就好了
02/19 21:38, 6F

02/20 13:46, , 7F
這樣 SOCKET 是不是也有可能會有問題??搞不好也是個class
02/20 13:46, 7F

02/20 14:54, , 8F
SOCKET就沒問題,原始程式都沒有問題
02/20 14:54, 8F

02/20 14:57, , 9F
瞭解 ^_^
02/20 14:57, 9F

02/20 17:23, , 10F
SOCKET只是個單純的structure,就沒有呼叫建構子的問題
02/20 17:23, 10F

02/21 10:43, , 11F
請問一下用new為何可以? new就會呼叫class建構子啊
02/21 10:43, 11F

02/21 10:46, , 12F
malloc好像也沒有呼叫建構子,剛google一下,比較懂了,thanks
02/21 10:46, 12F
文章代碼(AID): #1OgNSQMJ (C_and_CPP)
文章代碼(AID): #1OgNSQMJ (C_and_CPP)