鱼C论坛

 找回密码
 立即注册
查看: 1109|回复: 8

[已解决]动态分配空间问题,求大神解答

[复制链接]
发表于 2020-10-21 17:45:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
微信图片_20201021173859.png 微信图片_20201021173826.png

我希望是运行之后,对M, N, P进行scanf函数赋值, 之后M, N, P有值了,进而根据M, N, P的值进行分配空间
但是还是报错了。。。

既然是动态运行,不可以运行之后再赋值给M, N, P吗?进而后面开辟空间。
要是已经固定了M, N, P的值,算哪门子的动态分配空间。

我是不是哪里出错了,求大神提出解决办法
最佳答案
2020-10-21 18:56:51
#include <stdio.H>

int main()
{
        int i = 0;
        int j = 0;
        int m,n;
        //定义动态二维数组
        double ** matrix;

        //输入矩阵大小 M * N
        printf("Input the size of matrix M * N:\n");
        //scanf 格式是%d,%d,因此输入时请用逗号隔开,比如说 5,10
        scanf("%d,%d",&m,&n);

        //二维数组动态分配内存的方法
        //先 new double * [m], 分配m个 double *
        matrix = new double *[m];
        //再为每一个 double * 分配 n 个 double
        for(i = 0 ; i < m ; i ++)
        {
                matrix[i] = new double[n];
        }
        
        //输入数据
        printf("Input %d * %d number:\n",m,n);

        for(i = 0 ; i < m ; i ++)
        {
                for(j = 0 ; j < n ; j ++)
                {
                        scanf("%lf",&matrix[i][j]);
                }
        }
        
        //输出数据
        for(i = 0 ; i < m ; i++)
        {
                for(j = 0 ; j < n ; j++)
                {
                        printf("%lf,",matrix[i][j]);
                }
                printf("\n");
        }

        //释放每一个double * 
        for(i = 0 ; i < m ; i++)
        {
                delete [] matrix[i];
        }
        //释放double **
        delete [] matrix;

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-21 18:07:26 | 显示全部楼层
理论上数组长度不能为变量
可以看一下关键字 malloc free new delete
c++的话也可以用vector
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-21 18:56:51 | 显示全部楼层    本楼为最佳答案   
#include <stdio.H>

int main()
{
        int i = 0;
        int j = 0;
        int m,n;
        //定义动态二维数组
        double ** matrix;

        //输入矩阵大小 M * N
        printf("Input the size of matrix M * N:\n");
        //scanf 格式是%d,%d,因此输入时请用逗号隔开,比如说 5,10
        scanf("%d,%d",&m,&n);

        //二维数组动态分配内存的方法
        //先 new double * [m], 分配m个 double *
        matrix = new double *[m];
        //再为每一个 double * 分配 n 个 double
        for(i = 0 ; i < m ; i ++)
        {
                matrix[i] = new double[n];
        }
        
        //输入数据
        printf("Input %d * %d number:\n",m,n);

        for(i = 0 ; i < m ; i ++)
        {
                for(j = 0 ; j < n ; j ++)
                {
                        scanf("%lf",&matrix[i][j]);
                }
        }
        
        //输出数据
        for(i = 0 ; i < m ; i++)
        {
                for(j = 0 ; j < n ; j++)
                {
                        printf("%lf,",matrix[i][j]);
                }
                printf("\n");
        }

        //释放每一个double * 
        for(i = 0 ; i < m ; i++)
        {
                delete [] matrix[i];
        }
        //释放double **
        delete [] matrix;

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-21 19:30:41 | 显示全部楼层

                               
登录/注册后可看大图
[img] https://imgchr.com/i/BPeqvd[/img][img] https://imgchr.com/i/BPebgH[/img]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-21 19:31:19 | 显示全部楼层
本帖最后由 mrcrisis 于 2020-10-21 19:33 编辑


                               
登录/注册后可看大图

                               
登录/注册后可看大图

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-21 20:52:34 | 显示全部楼层
楼上说的对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-21 23:11:49 | 显示全部楼层
mrcrisis 发表于 2020-10-21 18:07
理论上数组长度不能为变量
可以看一下关键字 malloc free new delete
c++的话也可以用vector

我用的就是new运算符,c++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-21 23:53:27 | 显示全部楼层

第一次问问题,这个只能一个最佳吗?不好意思哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-22 10:28:49 From FishC Mobile | 显示全部楼层
谢谢各位鱼油的帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 23:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表