一开始在循环里写了个动态数组,可以正常运行。后来当我把动态数组的定义写在循环的末尾,释放内存写在了循环的开头,从第二次循环开始释放内存,即在当前循环的末尾建立动态数组,到下一个循环的开始释放内存,就出现了报错,引发了异常:读取访问权限冲突。L是0X1110112。该怎么解决呢?我是个新手,程序大概如下,请大家帮帮忙,找一下是哪里的问题然后告诉我怎么改,谢谢!
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstdlib>
#include<math.h>
#include<iomanip>
#include<fstream>
#include<sstream>
#include<stdlib.h>
#include<time.h>
#include<string.h>
using namespace std;
struct D
{
int n;
};
D *****LMP_Store;
int nn=0;
int L1=0,L2=0,L3=0,B=0;
void main()
{
do
{
int q,i,j,k;
nn+=1;
if (nn > 1)
{
for (q = 0; q < B; q++)
{
for (i = 0; i < L1; i++)
{
for (j = 0; j < L2; j++)
{
for (k = 0; k < L3; k++)
{
delete[]LMP_Store[q][i][j][k];
LMP_Store[q][i][j][k] = NULL;
}
delete[]LMP_Store[q][i][j];
LMP_Store[q][i][j] = NULL;
}
delete[]LMP_Store[q][i];
LMP_Store[q][i] = NULL;
}
delete[]LMP_Store[q];
LMP_Store[q] = NULL;
}
delete[]LMP_Store;
LMP_Store = NULL;
}
B=nn;
L1=nn;
L2=nn;
L3=nn;
D *****LMP_Store = new D ****[B];
for (q = 0; q < B; q++)
{
LMP_Store[q] = new struct D ***[L1];
for (i = 0; i < L1; i++)
{
LMP_Store[q][i] = new struct D **[L2];
for (j = 0; j < L2; j++)
{
LMP_Store[q][i][j] = new struct D *[L3];
for (k = 0; k < L3; k++)
{
LMP_Store[q][i][j][k] = new struct D;
}
}
}
}
} while (nn < 500);
}
要看你的代码,应该是指针的问题,比如说指针重复释放,访问了野指针,指针没有初始化。