我在一個庫中有這段代碼,我在想它是什麼,因爲我有內存問題,我想這就是原因。memset(foo-> a + foo-> b,0,10)是什麼意思?
所以一段代碼以下:
int new_size = foo->a_size + 10;
foo->a = realloc(foo->a, new_size*sizeof(struct items));
memset(foo->a+foo->a_size, 0, 10);
foo->a
是類型struct items*
和foo->a_size
是類型int
。
第一線的重新分配新的內存有10個街區,但現在我想知道如果memset()
套都foo->a
和foo->a_size
爲0或應該從11-20到0 foo->a
這套塊? 我試圖依靠自己運行此代碼塊只接收Segmentation fault
編輯:
問題是,做的memset()
同時設置foo->a
和foo->a_size
爲0或它與設定塊偏移foo->a_size
到0
in foo->a
。後面的假設是正確的,但我還需要修正memset()
,所以最後一個參數是10 * sizeof(struct items)
。我還編輯了從foo->b
到foo->a_size
的變量名稱。
不管結果,'foo-> A = realloc的(foo->一個,....'是一個相當壞習慣/編碼風格。想象一下,realloc失敗.......... –
'foo-> a'是指向分配內存的指針,'foo-> b'是它的偏移量。可以寫得更清晰,更安全! –
他們真的叫'a'和'b',還是他們有意義的名字? – slim