直接上代码块
#include <stdio.h>
float sum_elements(float a[], unsigned length);
int main(int argc, const char *argv[])
{
float a[] = {1.0,2.0,3.3,4.3,5.6,6.1,7.8,8.5,9.0,10.1};
sum_elements(a, 0);
return 0;
}
float sum_elements(float a[], unsigned length){
int i;
float result = 0;
for(i=0; i<= length-1; i++)
result +=a[i];
return result;
}
这里 i< length -1 , 因为length是无符号数,所以 当length = 0 , 0-1 = -1 , -1 的无符号数表示 是0xFFFFFFFFF,所以,i会一直增值往 这个最大的无符号数奔去……
测试结果:内存访问越界
linux@linux:~/clanguage/csapp$ gcc e225.c -o e225 -Wall
linux@linux:~/clanguage/csapp$ ./e225
Segmentation fault (core dumped)
gdb 调试过程
(gdb) b 7
Breakpoint 1 at 0x8048450: file e225.c, line 7.
(gdb) r
Starting program: /home/linux/clanguage/csapp/e225
Breakpoint 1, main (argc=1, argv=0xbffff734) at e225.c