2012-02-08 126 views
0

我在VC++ 2008中工作,並試圖分配一個多維的字符數組來做一些文件工作。我知道每當一個數組被分配時,數組的所有成員都應該按照連續順序進行初始化。我現在有這個。初始化多維數組C++

char ** thing = new char *[lineY]; 
for (int ii = 0; ii < lineY; ii++){ 
    thing[ii] = new char[lineX]; 
} 
... // working with array 
// deleting each part of the array. 
for (int ii = 0; ii < lineY; ii++){ 
    delete [] thing[ii]; 
} 
delete [] thing; 

,我運行到的問題是,如果我的陣列添加到觀察名單,或將中斷其被分配的調試狀態之後,該陣列的容量相當於一個數字,如51,或32,而不是與指標值的空間,但塊時我嘗試讓我的配置來初始化各指標的值,這樣的:

char ** thing = new char *[lineY]; 
for (int ii = 0; ii < lineY; ii++){ 
    thing[ii] = new char[lineX]; 
     for (int jj = 0; jj < lineX; jj++){ 
     thing[ii][jj] = ''; 
    } 
} 

編輯:編譯器會引發「C2137空字符常量」 AM我做錯了什麼? 編輯:讀取msdn的錯誤號,並找到答案

+0

只是一個小問題,爲什麼在地球上,你會永遠做手工n維數組分配? – ScarletAmaranth 2012-02-08 11:04:02

+0

@ScarletAmaranth當你不需要生成一個只用於它的實例的對象時,只要你記得動態OOP的關鍵原則就可以動態地分配內存:破壞你新的東西,管理你有的東西,只在需要時分配。除此之外,它與實例化分配n維數組的對象相同。我只是避免了一堆訪問者。 – gardian06 2012-02-08 11:17:38

+0

您可以隨時分配一個數組,按行/列 - 主要順序存儲所有元素,並設置類似二維數組的指針。 – suszterpatt 2012-02-08 12:38:50

回答

1

你不能寫thing[ii][jj] = '',因爲''是不允許的空字符常量。嘗試用類似' '(與'之間的空格)代替''

0

是否是lineX和lineY編譯時常量?在這種情況下:

std::array<std::array<char, lineX>, lineY> thing; 

否則:

std::vector<std::vector<char> > thing(lineY, std::vector<char>(lineX));