memcpy引起的乙個bug

2021-06-01 21:24:24 字數 660 閱讀 4883

void *memcpy(void *dest, const void *src, size_t n);

由src指向位址為起始位址的連續n個位元組的資料複製到以dest指向位址為起始位址的空間內。

memcpy(dest,0,5);
真正應該使用的是

memset(dest,0,5);
關於memset: memset()函式把從開始位址為dest,長度為n的記憶體區域內的每個位元組都設定為c的值,注意c是個單位元組的字元。

**對於變數

struct sample_strcut sttest;

一般情況下,清空sttest的方法:

sttest.csname[0]='\0';

sttest.iseq=0;

sttest.itype=0;

用memset就非常方便:

memset(&sttest,0,sizeof(struct sample_struct));

如果是陣列:

struct sample_struct test[10];

則memset(test,0,sizeof(struct sample_struct)*10);

另外:如果結構體中有陣列的話還是需要對陣列單獨進行初始化處理的。

由框架中乙個BUG引起的

今天加班在給new guys做培訓的時候,發生了乙個莫名其妙的問題,幾經周折,才發現是公司現有框架的乙個bug。xml converter valueobject objectid lib class com.icsc.tm.mscdao.tmjcs03vo type unique converte...

乙個由有符號下標引起的bug

先看段 if s d i 這裡的d是乙個char 的記憶體buffer,s是乙個256長度的bool陣列。上段 邏輯是,s已進行過初始化,其作用是過濾位元組,有些位元組對應true,有些位元組對應false。明顯,d i 有256種可能。上面的邏輯正確麼?上面的 其實就是我專案裡的一段 看似沒有問題...

處理系統中乙個併發引起的bug

之前系統在更新某條業務資料的狀態時,並沒有判斷該資料的原來的狀態,直接更新成了最新狀態。這樣如果有多執行緒來訪問 會出現由於併發導致出現髒資料。idname status1測試 1當某個業務請求過來後,我們會把訂單資料的status更新成2,表示訂單完成,然後進行後續業務動作,產生一些正常的業務資料...