2个不同的数组,一个分配

2 different arrays, one allocation

本文关键字:一个 分配 数组 2个      更新时间:2023-10-16

我正在解决一个调度问题,并创建一个实例生成器。我有一个问题——数组t1、t2、t3指向同一个内存单元,因此所有数组在分配后都具有相同的数据。这是我的代码

(…)

int **t1;
    t1= new int*[1];
    t1[1]=new int[2];
    int **t2;
    t2= new int*[1];
    t2[1]=new int[2];
    int **t3;
    t3= new int*[1];
    t3[1]=new int[2];
    for (int s=0; s<20; s++ )
    {
        for (int w=0; w<3; w++)
        {
            time[w]=(rand() % 200) +1;
            machine[w]= (rand() % 3) +1;
            if (w>0)
                    while (machine[w]==machine[w-1] || machine[w]==machine[0])
                        {
                            machine[w]= (rand() % 3) +1;
                        }
        }
        t1[0][0]=machine[0];
        t1[0][1]=time[0];
        t2[0][0]=machine[1];
        t2[0][1]=time[1];
        t3[0][0]=machine[2];
        t3[0][1]=time[2];

(…)

非常感谢!

t1= new int*[1];

分配一个指针数组。

t1[1]=new int[2];

写入这个单元素数组的第二个元素。这会导致未定义的行为。在您的情况下,它听起来像&t1==&t2[1],导致您每次创建新数组时都会覆盖以前分配的地址。

您应该写入数组的第一个元素,而不是

t1[0]=new int[2];
// ^

如果C样式数组的使用不是赋值的要求,那么使用std::vector<int>可以更容易地实现int的数组。

相关文章: