作者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://www.ptt.cc/bbs/C_and_CPP/M.1481792305.A.9F0.html
→ Schottky: 這樣算 dangling pointer 沒錯 12/15 17:10
→ Schottky: 但並不保證這樣做會引發 segmentation fault 啊 12/15 17:11
→ Caesar08: 算 12/15 17:25
→ dou0228: 當然是 dangling pointer 12/15 23:55
→ stupid0319: 是hurry potter 12/16 06:36
推 sorryla: 是無預期行為 但不代表一定會掛掉 12/16 06:56
感謝樓上各位大大
小弟最近在寫一些範例程式
想寫一個 dangling pointer 的例子,就寫了以上的例子
沒想到竟然跑得動,我還以為我搞錯了
C/C++ 板惠我良多
※ 編輯: Neisseria (1.171.134.251), 12/16/2016 10:01:26