作者Neisseria (Neisseria)
看板C_and_CPP
标题[问题] 这样算 dangling pointer 吗?
时间Thu Dec 15 16:58:22 2016
开发平台(Platform): (Ex: Win10, Linux, ...)
Debian GNU/Linux 和 OS X 10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Linux: gcc v4.9.2
OS X: clang-703.0.31
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
无
问题(Question):
我写了一个本来以为会 segmentation fault 的程式
却正确地指向特定的资料
喂入的资料(Input):
无
预期的正确结果(Expected Output):
segmentation fault
错误结果(Wrong Output):
得到值 16
程式码(Code):(请善用置底文网页, 记得排版)
#include <stdio.h>
#include <stdlib.h>
int main() {
const int SIZE = 10;
int* a = (int*) malloc(SIZE * sizeof(int));
int* a1 = a;
for (int i = 0; i < SIZE; i++) {
int j = i + 1;
a[i] = j * j;
}
free(a);
a = NULL;
printf("%d\n", a1[3]);
// segmentation fault if accessing a
// printf("%d\n", a[3]);
return 0;
}
补充说明(Supplement):
感谢 C/C++ 版
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.227.36.79
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1481792305.A.9F0.html
1F:→ Schottky: 这样算 dangling pointer 没错 12/15 17:10
2F:→ Schottky: 但并不保证这样做会引发 segmentation fault 啊 12/15 17:11
3F:→ Caesar08: 算 12/15 17:25
4F:→ dou0228: 当然是 dangling pointer 12/15 23:55
5F:→ stupid0319: 是hurry potter 12/16 06:36
6F:推 sorryla: 是无预期行为 但不代表一定会挂掉 12/16 06:56
感谢楼上各位大大
小弟最近在写一些范例程式
想写一个 dangling pointer 的例子,就写了以上的例子
没想到竟然跑得动,我还以为我搞错了
C/C++ 板惠我良多
※ 编辑: Neisseria (1.171.134.251), 12/16/2016 10:01:26