访问冲突写入位置 0xXXXXXXXX
Access violation writing location 0xXXXXXXXX
我正在编写一个迭代实现合并排序的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];
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 如何选择在 csv 文件中输出的位置
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 如何在特定位置追加 json 文件
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 访问冲突写入位置 0xXXXXXXXX