我正在实现二维数组动态内存分配。在编译程序时,我收到了一个错误。代码如下: -
# 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;在任务`
答案 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 *)
。