首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >二维数组指针

二维数组指针
EN

Stack Overflow用户
提问于 2013-12-03 07:22:37
回答 1查看 121关注 0票数 1

我在类Zadanie中声明了三维数组,在程序中的一个位置,我想打印所有对象的值。不幸的是,它们指向内存中相同的位置,因此,它们打印的值是第一个对象的20倍。

(...)

代码语言:javascript
运行
复制
class Zadanie
{
  int dlugosc;
  int **operacja1;
  int **operacja2;
  int **operacja3;
  public:
      Zadanie(int **t1, int **t2, int **t3){
        operacja1= new int*[1];
        operacja1[0]=new int[2];
        operacja2= new int*[1];
        operacja2[0]=new int[2];
        operacja3= new int*[1];
        operacja3[0]=new int[2];
        operacja1=t1;
        operacja2=t2;
        operacja3=t3;
        dlugosc=operacja1[0][1]+operacja2[0][1]+operacja3[0][1];
    }

};

(...)

代码语言:javascript
运行
复制
srand( time(NULL));
    int maszyna[3];
    int czas[3];
    vector <Zadanie> zadania;
    int **t1;
    t1= new int*[1];
    t1[0]=new int[2];

    int **t2;
    t2= new int*[1];
    t2[0]=new int[2];

    int **t3;
    t3= new int*[1];
    t3[0]=new int[2];

    for (int s=0; s<20; s++ )
    {
        for (int w=0; w<3; w++)
        {
            czas[w]=(rand() % 20) +1;
            maszyna[w]= (rand() % 3) +1;
            if (w>0)
                    while (maszyna[w]==maszyna[w-1] || maszyna[w]==maszyna[0])
                        {
                            maszyna[w]= (rand() % 3) +1;
                        }
        }

        t1[0][0]=maszyna[0];
        t1[0][1]=czas[0];
        t2[0][0]=maszyna[1];
        t2[0][1]=czas[1];
        t3[0][0]=maszyna[2];
        t3[0][1]=czas[2];
        /*cout<<"tablice "<< t1[0][0] <<" " << t1[0][1]<<endl;
        cout<<"tablice "<< t2[0][0] <<" " << t2[0][1]<<endl;
        cout<<"tablice "<< t3[0][0] <<" " << t3[0][1]<<endl;*/

        Zadanie pomocnik(t1,t2,t3);
        zadania.push_back(pomocnik);
    }

(...)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-03 07:32:44

首先,您正在有效地在构造函数中创建内存泄漏。

代码语言:javascript
运行
复制
Zadanie(int **t1, int **t2, int **t3){
        operacja1= new int*[1];
        operacja1[0]=new int[2];
        operacja2= new int*[1];
        operacja2[0]=new int[2];
        operacja3= new int*[1];
        operacja3[0]=new int[2];
        operacja1=t1;
        operacja2=t2;
        operacja3=t3;
        dlugosc=operacja1[0][1]+operacja2[0][1]+operacja3[0][1];
    }

首先给operacja1分配new int*[1],然后给它分配t1

另一件事是

代码语言:javascript
运行
复制
int **t1;
t1= new int*[1];
t1[0]=new int[2];

t1是指向指针的指针,您为一个指针分配空间,即t1 (它似乎是多余的),您可以像可能编写的那样

代码语言:javascript
运行
复制
int *t1 = new int[2];

然后,代替

代码语言:javascript
运行
复制
t1[0][1]=czas[0];

你可以写

代码语言:javascript
运行
复制
t1[1] = czas[0];

后来你似乎使用了向量,我不知道你为什么一开始就不使用向量。

我不确定这是否有助于解决你的问题,但这是一个开始。

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

https://stackoverflow.com/questions/20345193

复制
相关文章

相似问题

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