我在类Zadanie中声明了三维数组,在程序中的一个位置,我想打印所有对象的值。不幸的是,它们指向内存中相同的位置,因此,它们打印的值是第一个对象的20倍。
(...)
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];
}
};(...)
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);
}(...)
发布于 2013-12-03 07:32:44
首先,您正在有效地在构造函数中创建内存泄漏。
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
另一件事是
int **t1;
t1= new int*[1];
t1[0]=new int[2];t1是指向指针的指针,您为一个指针分配空间,即t1 (它似乎是多余的),您可以像可能编写的那样
int *t1 = new int[2];然后,代替
t1[0][1]=czas[0];你可以写
t1[1] = czas[0];后来你似乎使用了向量,我不知道你为什么一开始就不使用向量。
我不确定这是否有助于解决你的问题,但这是一个开始。
https://stackoverflow.com/questions/20345193
复制相似问题