- 论坛徽章:
- 0
|
本帖最后由 digdeep126 于 2011-11-20 22:40 编辑
感觉这个例子还有继续研究的价值。为了方便研究,将原来的代码稍微修改一下:- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- char *foo;
- int i;
- foo = malloc(sizeof(char));
- *foo = 'a';
- printf("foo: %s\n", foo);
- printf("addr of foo: %p\n", foo);
- for(i = 1; i < 100000; i++){
- if(*(foo + i) != 0){
- printf("%d\t", i);
- printf("%d\n", *(foo + i));
- }
- }
- printf("===============\n");
- //for(i = -1; i > -9; i--)
- for(i = -1; i > -10; i--)
- printf("%d\n", *(foo + i ));
- free(foo);
- return 0;
- }
复制代码 运行结果:
digdeep@ubuntu:~/uulp$ gcc -Wall -o memory memory.c
digdeep@ubuntu:~/uulp$ ./memory
foo: a
addr of foo: 0x938e008
12 -15
13 15
14 2
===============
0
0
0
17
0
0
0
0
Segmentation fault
digdeep@ubuntu:~/uulp$ ./memory
foo: a
addr of foo: 0x8284008
12 -15
13 15
14 2
===============
0
0
0
17
0
0
0
0
Segmentation fault
digdeep@ubuntu:~/uulp$
这里有几个疑问:
1)为什么每次运行时foo变量的地址不同,但是两个 for 循环输出的内容总是相同的?
2)第二个 for 循环当将 "i > -10;" 改为"i > -9;" 时,不会出现Segmentation fault,难道中间的8个字节是内存分配系统的“薄记信息”,而从第9个字节开始,就是访问另外一个程序申请的堆内存---所以报Segmentation fault?
期待大牛解释! |
|