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

Error While dynamically allocating memory for a two - D array

本文关键字:出错 内存 动态分配 二维数组      更新时间:2023-10-16

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

   # 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]

如果用普通new 替换难看的malloc

rptr= new Rowarray[nrows];

您的程序可以编译甚至运行。别忘了delete [] rptr;

但为什么不使用矢量呢?

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

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

您的语法是错误的,而且C/C++无论如何都不允许您转换为数组类型。

您的Rowarray可能是int**的typedef,所以您可以说:

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

一般来说,除非你因为家庭作业或其他事情而被要求,否则你这样做是一种过于艰难的方式。不使用malloc和原始指针,您可以轻松地使用std::vector<std::vector<int> > 创建动态2d数组