我正在实现一个二维数组的动态内存分配。在编译程序时,我得到了一个错误。代码如下:
# 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**' toint (*)5‘
发布于 2012-02-27 03:18:33
尝试删除malloc左侧的强制转换(圆括号)。如果这不起作用,请用(Rowarray *)替换它们。
发布于 2012-02-27 03:18:05
如果你用普通的new替换你丑陋的malloc
rptr= new Rowarray[nrows];你的程序会编译甚至运行。还有,别忘了delete [] rptr;。
但是为什么不使用向量呢?
#include <vector>
//...
std::vector<std::vector<int> >rptr;发布于 2012-02-27 03:16:36
您的语法是错误的,而且C/C++无论如何都不允许您转换为数组类型。
您的Rowarray可能应该是int**的一个类型定义,因此您可以这样说:
rptr=(int**)malloc(nrows * COLS * sizeof(int)) ; 更广泛地说,除非你因为家庭作业或其他原因而对你有要求,否则你做这件事是非常困难的。您可以使用std::vector<std::vector<int> >轻松创建动态2d数组,而不是使用malloc和原始指针
https://stackoverflow.com/questions/9456213
复制相似问题