Nas*_*wan 1 c++ memory-management
我正在编写一个迭代实现Merge Sort的c ++程序.主要代码如下所示,我无法理解为什么我有"访问冲突写入位置0xXXXXXXXX"错误,即使我在另一个程序中以相同的方式分配了更多的内存(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");
}
Run Code Online (Sandbox Code Playgroud)
小智 7
您只为1个整数分配内存:new int(size)并将其指定为size.所以你没有1GB的内存指向.访问超过1整数是未定义的行为,这可能会导致访问冲突.
更改new int(size)方括号:new int[size].
更好的是,使用一个std::vector<int>.
| 归档时间: |
|
| 查看次数: |
1562 次 |
| 最近记录: |