求助,这个程序有个内存的问题
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
ifstream fin("A-large-1.in.txt");
ofstream fout("A-large-1.out.txt");
bool isValid(const int *matrix,int n){
int N=n*n;
int* record=new int[N];
for(int j=0;j<N;j++){
record[j]=0;
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
record[matrix[i*N+j]-1]=1;
}
for(int j=0;j<N;j++){
if(record[j]==0){
delete []record;
return false;
}
}
for(int j=0;j<N;j++){
record[j]=0;
}
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
record[matrix[i+j*N]-1]=1;
}
for(int j=0;j<N;j++){
if(record[j]==0){
delete [] record;
return false;
}
}
for(int j=0;j<N;j++){
record[j]=0;
}
}
for(int i=0;i<N;i=i+n){
int k;
for(int j=0;j<n;j++){
k=i*N+j*n;
for(int m=0;m<n;m++){
for(int l=0;l<n;l++){
record[matrix[k+m*N+l]-1]=1;
}
}
for(int j=0;j<N;j++){
if(record[j]==0){
delete [] record;
return false;
}
}
for(int j=0;j<N;j++){
record[j]=0;
}
}
}
delete []record;
return true;
}
int main(){
int num;
fin>>num;
for(int i=0;i<num;i++){
cout<<i<<endl;
int n;
fin>>n;
int N=n*n;
int *matrix=new int[N*N];
for(int j=0;j<N;j++){
for(int k=0;k<N;k++){
fin>>matrix[j*N+k];
}
}
string answer;
if(isValid(matrix,n)){
answer="Yes";
}else{
answer="No";
}
fout<<"Case #"<<(i+1)<<": "<<answer<<endl;
delete [] matrix;
}
}
执行到第64循环时,出现内存错误。malloc: *** error for object 0x100103b78: incorrect checksum for freed object - object was probably modified after being freed.
找不到原因,请大神们帮忙。。。
[解决办法]
代码没问题,但是如果文件内容不对,数据为0 ,就会有越界访问.
管理内存的数据被改写,造成delete 时候,释放内存出错。
如果这也算问题的话,只能是代码不够健壮,没有处理好非法输入。
个人觉得主要问题,应该是,帖主对这个问题的理解,有错误,造成程序逻辑不正确。
换个数据,就出错了。
这个程序本身,基本没有大问题。
如果可能,请贴出问题和对应的数据。
不然,逻辑错误,别人没有办法看出来。
如果使程序本身有语法,语义上的错误;
或者掉入语言陷阱中了,贴出代码;
别人基本能够清楚,错误么地方。