#define MAX 255 int main(){ unsigned char A[MAX], i; for (i = 0; i <= MAX; i++) A[i] = i; }
#include <stdio.h> void overflow(char* s) { char buffer[10]; strcpy(buffer, s); } int main() { char* s = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"; overflow(s); printf("Program terminated normally.\n"); return 0; }通常,当程序调用函数时,会将函数的参数、返回地址和局部变量等信息存储在栈空间中。如果这些数据的总大小超过了栈的容量,就会导致栈溢出。在这个示例中,函数overflow定义了一个大小为10的缓冲区buffer,并尝试将输入的字符串s拷贝到缓冲区中。然而,当输入的字符串超过10个字符时,就会发生栈溢出。
MAX=255
数组A的下标范围为:0..MAX-1,这是其一..
其二.当i循环到255时,循环内执行:
A[255]=255;
这句本身没有问题..但是返回for (i=0;i<=MAX;i++)语句时,
由于unsigned char的取值范围在(0..255),i++以后i又为0了..无限循环下去.