首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为二维数组动态分配内存时出错

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

Stack Overflow用户
提问于 2012-02-27 03:10:10
回答 3查看 189关注 0票数 0

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

代码语言:javascript
复制
   # 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‘

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-27 03:18:33

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

票数 1
EN

Stack Overflow用户

发布于 2012-02-27 03:18:05

如果你用普通的new替换你丑陋的malloc

代码语言:javascript
复制
rptr= new Rowarray[nrows];

你的程序会编译甚至运行。还有,别忘了delete [] rptr;

但是为什么不使用向量呢?

代码语言:javascript
复制
#include <vector>
//...
std::vector<std::vector<int> >rptr;
票数 3
EN

Stack Overflow用户

发布于 2012-02-27 03:16:36

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

您的Rowarray可能应该是int**的一个类型定义,因此您可以这样说:

代码语言:javascript
复制
rptr=(int**)malloc(nrows * COLS * sizeof(int)) ; 

更广泛地说,除非你因为家庭作业或其他原因而对你有要求,否则你做这件事是非常困难的。您可以使用std::vector<std::vector<int> >轻松创建动态2d数组,而不是使用malloc和原始指针

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9456213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档