今天在進(jìn)行memcpy出現(xiàn)了一些問題。
原因是這樣的:
我定義了這樣一個(gè)接口,里面涉及memcpy操作。
舉個(gè)例子吧,如接口addItem,
void addItem(int iType, LPVOID *pItem);
里面有一個(gè)對象是TCHAR szStr[512];
我直接進(jìn)行了這樣的拷貝,memcpy(szStr, pItem, sizeof(szStr));
今天就出問題了。提示某塊內(nèi)存無法訪問。于是重新看這個(gè)問題。為什么會這么寫這樣的接口呢?
我原先寫的是 void addItem(int iType, TCHAR *pItem);
后來由于需求的變化,變成了LPVOID。改成這個(gè)以后,原先的字符串wcscpy就變成了memcpy。這個(gè)一直沒有引起警覺。其實(shí)這一步的改變,就應(yīng)該對接口做相應(yīng)的調(diào)整,接口應(yīng)該變?yōu)?br>void addItem(int iType, LPVOID *pItem, DWORD cbItem);
增加一個(gè)參數(shù)來說明pItem的大小。然而這一步?jīng)]有做。
所以今天的教訓(xùn)就是要注意修改接口的時(shí)候,注意相應(yīng)的變化。
還有是字符串的操作問題,寬字符和ASCII字符串的操作要注意。
posted on 2009-07-29 11:58
Sandy 閱讀(184)
評論(0) 編輯 收藏 引用 所屬分類:
日常總結(jié)