Search Google

Saturday, June 23, 2007

第一次看到這種語法

很少碰C++的我今天看到一段C++的code,大意是:

- 5 void DoubleArray(int **a) {
| 6 int * &b = (*a);
| 7 //b = (int *)malloc(sizeof(int)*4);
| 8 b = new int[4];
| 9 b[0] = 1;
| 10 printf("--\n");
| 11 }
12
- 13 int main(void) {
| 14 int **a;
| 15 DoubleArray((int **)a);
| 16 printf("==\n");
| 17 return (0);
| 18 }


以上是我自己寫的示範,compile過後沒錯,但是執行到第八行的時候就出現記憶體區段錯誤,用第七行代換第八行也得到同樣的結果。
用GDB dubug的時候將breakpoint設在第八行所看到的資訊是:
(gdb) p a
$1 = (int **) 0xb7cd8c8c
(gdb) p b
$2 = (int *&) @0xb7cd8c8c: 0x489d

看起像是把b當作pointer使用(因為可以new / malloc),不過又多了些資訊,比如記錄了b所記錄的值是位於a的address。但是為何在動態取得記憶體的時候會出現錯誤卻不得而知?!
看來C++跟C還是有"商當"大的差別。。。
最後,*&b到底是什麼東西 @@

No comments: