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