2012-10-06 106 views
0

我有大小101的緩衝也能收到堆棧溢出錯誤

char buffer[101] 

我想一個地址複製到陣列

int i; 
for(i=0;i<sizeof(buffer);i+=4) 
    *(long*)&buffer[i] = address 

在地址的類型爲long。

但是當我運行它時,我遇到了堆棧粉碎檢測。任何想法爲什麼?拋開

+2

因爲你的'buffer'不能被'sizeof long'整除,並且最後一次訪問超出界限。 – DCoder

回答

7

對齊問題,

for(i=0;i<sizeof(buffer);i+=4) 
    *(long*)&buffer[i] = address 
i == 100你寫過去分配的緩衝區

。你應該停止當i > sizeof buffer - 4