错误为二维数组动态分配内存时

时间:2012-02-26 19:10:10

标签: c++ arrays multidimensional-array

我正在实现二维数组动态内存分配。在编译程序时,我收到了一个错误。代码如下: -

   # include<iostream>
   # include<stdio.h>
   # include<conio.h>
   # include<stdlib.h>
   # define COLS 5
   using namespace std;

   typedef int Rowarray[COLS];
   int main()
   {
      Rowarray *rptr;
      int nrows=3;
      int row,col;
      rptr=(int**)malloc(nrows * COLS * sizeof(int)) ; // Error Line
      for(row=0;row<nrows;row++)
      { static int i=0;
        for(col=0;col <COLS;col++,i++)
        {
          rptr[row][col]=i;
        }
      }  
      for(row=0;row<nrows;row++)
      { 
        for(col=0;col <COLS;col++)
        {
          cout << "\n" << rptr[row][col];
        }
      }     
     getch();  
     return 0;
   }

我得到的错误是cannot convert int**' to int(*)[5]&#39;在任务`

3 个答案:

答案 0 :(得分:3)

如果您将丑陋的malloc替换为普通new

rptr= new Rowarray[nrows];

你的程序编译甚至运行。不要忘记delete [] rptr;

但为什么不使用矢量?

#include <vector>
//...
std::vector<std::vector<int> >rptr;

答案 1 :(得分:1)

您的语法错误,C / C ++无法让您转换为数组类型。

您的Rowarray应该是int**的typedef,因此您可以说:

rptr=(int**)malloc(nrows * COLS * sizeof(int)) ; 

更一般地说,除非你因为家庭作业或某些事情而对你施加了要求,否则你这样做是非常困难的。您可以使用malloc

轻松创建动态二维数组,而不是使用std::vector<std::vector<int> >和原始指针

答案 2 :(得分:1)

尝试删除malloc左侧的强制转换(括号)。如果不起作用,请将其替换为(Rowarray *)

相关问题