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