2008年7月17日 星期四

sizeof的陷阱

看到Jserv的blog http://blog.linux.org.tw/~jserv/archives/001876.html
還真的發現程式語言一些細緻的地方,一些我以前注意過,但是不大放在心上
現在竟然連C跟C++都"不同調",讓我想起以前一些錯誤的sizeof用法

一般人習慣用sizeof來求取陣列大小,但是這個也只是適用於靜態陣列,如果是動態配置就不行
比方說

#include 〈iostream〉

using namespace std;

int main(void){
int *a=new int[3];
int b[3];
cout
〈〈 sizeof(a) 〈〈 "," 〈〈 sizeof(b) 〈〈 endl;
delete[] a;
return 0;
}


輸出應該是4,12
因為前面的sizeof取到的是指標大小,所以在32bits的OS裡面是4bytes沒有錯,這是一個常見的忽略