2012-10-06 91 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