'='标记之å‰çš„预期构造函数,æžæž„函数或类型转æ¢

时间:2012-03-19 20:08:46

标签: c++ memory-management

int sizex = 3;
int sizey = 3;
int * grid;
grid = new int [sizex][sizey];  // Line 6
grid = {{0}};

我试图在这里声明一个数组,但编译器说

  

第6行:错误:在'='标记

之å‰çš„预期构造函数,æžæž„函数或类型转æ¢

你能帮我弄明白为什么å—?

4 个答案:

答案 0 :(得分:4)

因为语法错误。那ä¸æ˜¯ä½ åˆ†é…内存的方å¼ã€‚

如果你想è¦ä¸€ä¸ªçŸ©é˜µï¼Œä½ å¯èƒ½æƒ³è¦

int** grid;

ä½ å¯ä»¥åƒè¿™æ ·åˆ†é…内存:

grid = new int*[sizex];
for ( int i = 0 ; i < sizex ; i++ )
   grid[i] = new int[sizey];

此外,在您为grid = {{0}};分é…内存åŽï¼Œä½œä¸šgrid并没有多大æ„义。

ä¸è¦å¿˜è®°åˆ é™¤å†…存。

答案 1 :(得分:1)

正如Luchianå’ŒMark Bå·²ç»è¯´è¿‡çš„那样,使用newæ¥åˆ›å»º2D数组是ä¸æ­£ç¡®çš„。

如果è¦åˆå§‹åŒ–所有元素,请使用以下构造:

grid = new int*[sizex];
for (int i = 0 ; i < sizex ; i++)
   grid[i] = new int[sizey]();
                         //^^

这会将元素åˆå§‹åŒ–为零。

ä½ ä¸èƒ½ä½¿ç”¨ï¼š

grid = {{0}};

用于赋值:{}åªèƒ½åœ¨åˆå§‹åŒ–时使用。

答案 2 :(得分:0)

您ä¸èƒ½ä½¿ç”¨è¯¥è¯­æ³•åœ¨C ++中直接创建2d数组。虽然您å¯ä»¥ä½¿ç”¨æ³¨é‡Šï¼ˆint (*p)[6] = new int[3][6];)中æ到的有些模糊的语法,但我ä¸å»ºè®®è¿™æ ·åšï¼Œå› ä¸ºå®ƒå¯èƒ½ä¼šä½¿ä»£ç è¿‡äºŽå¤æ‚。

相å,你想è¦çš„是矢é‡çŸ¢é‡ã€‚使用vector有效地简化了你的内存管ç†ï¼Œå› ä¸ºC ++ä¸æ˜¯åžƒåœ¾æ”¶é›†ã€‚

std::vector<std::vector<int> > grid(sizex, std::vector<int>(sizey));

答案 3 :(得分:0)

    int main(){
      int** grid;
      int sizex = 5;
      int sizey = 5;
      grid = new int*[sizex];
      for ( int i = 0 ; i < sizex ; i++ )
         grid[i] = new int[sizey];

// ... a lot of code 

// .. deleting:
      for ( int i = 0 ; i < sizex ; i++ )
             delete [] grid[i];
       delete [] grid; 
    }
相关问题