访问冲突写入位置 0xXXXXXXXX

Access violation writing location 0xXXXXXXXX

本文关键字:0xXXXXXXXX 位置 访问冲突      更新时间:2023-10-16

我正在编写一个迭代实现合并排序的c ++程序。主代码如下所示,我不明白为什么我会遇到"访问违规写入位置 0xXXXXXXXXX"错误,即使我在另一个程序中以相同的方式分配了更多的内存 (1 GB)。

void main()
{
    //int a[size];
    int* a =  new int(size); //initialising an int array dynamically contains 16777216 el
    srand(time(NULL));
    for(int i = 0 ; i < size; i++)
    {
        a[i]= 1 + rand() % 10;
    }
    for(int i = 0;  (size / 2) / pow((double)2, i)>= 1; i++)
    {
        int n = pow((double)2, i);
        int offset = 0;
        for(int j = 0; j < (size / 2) / pow((double)2, i); j++)
        {
            int* tmp = new int(n);
            merge(a + offset, n, a + offset + n, n, tmp);
            memcpy(a + offset, tmp, n*2 * sizeof(int));
            offset += pow((double)2, i+1);
        }
    }
    for(int i = 0; i < size; i++)
    {
        cout<<a[i]<<" ";
        //printf("%d ", a[i]);
    }
    cout<<endl;
    system("PAUSE");
}

您只为 1 个整数分配足够的内存:new int(size) 并将其分配为 size 。所以你没有 1GB 的内存由 a 指向。访问超过 1 个整数是未定义的行为,这可能会造成访问冲突。

new int(size)更改为方括号:new int[size]

更好的是,使用std::vector<int>.

分配代码中的轻微拼写错误。此行

int* a =  new int(size);

创建size 的单个int

试试这个

int* a =  new int[size];