bool structer::del(int num){
if(num<0 || num>elem || !elem) return false;
int xx,yy;
xx=(num-1) / max_size;
yy=(num-1) % max_size;
//если последний
if(num==elem){
delete mass[xx][yy];
if((elem-1)%max_size==0)delete mass[--scount];
elem--;pysto++;
return true;
}
//иначe
object*** tmp;
int ii=0,kk=0,i=0,k=0;
int n=elem-1,pp=scount;
if((elem-1)%max_size==0)tmp = new object**[--scount];
else tmp = new object**[scount];
for(; i<scount; i++){
tmp = new object*[max_size];
for(k=0; k < max_size && n; k++, n--){
if(i==xx && k==yy)break;
if(mass[k]->get_ident()==0)tmp[k]=new matr(*(matr*)mass[k]);
else tmp[k]=new Integer(*(Integer*)mass[k]);
}
if(i==xx && k==yy) break;
}
//копируем остальное
bool flagc;
if(k==0)flagc=false;
else flagc=true;
for(ii=i; ii<scount;ii++){
if(flagc) flagc=false;
else tmp[ii] = new object*[max_size];
for(kk=k; kk<max_size && n; kk++,n--)
if(kk+1!=max_size){
if(mass[ii][kk+1]->get_ident()==0)tmp[ii][kk]=new matr(*(matr*)mass[ii][kk+1]);
else tmp[ii][kk]=new Integer(*(Integer*)mass[ii][kk+1]);
}
else{
if(mass[ii+1][0]->get_ident()==0)tmp[ii][kk]=new matr(*(matr*)mass[ii+1][0]);
else tmp[ii][kk]=new Integer(*(Integer*)mass[ii+1][0]);
}
}
//удаляем
n=elem;
for(int i=0;i<pp;i++){
for(int ii=0;ii<max_size && n;ii++){
if(mass[ii]){delete mass[ii];n--;}
}
delete mass; // ОШИБКА!!!!!
}
delete mass;
//копируем в новый
n=elem-1;
mass=new object**[scount];
for(int l=0;l<scount;l++){
mass[l]=new object*[max_size];
for(int m=0;m<max_size && n; m++, n--){
if(tmp[l][m]->get_ident()==0)mass[l][m]=new matr(*(matr*)tmp[l][m]);
else mass[l][m]=new Integer(*(Integer*)tmp[l][m]);
}
}
for(i=scount-1;i>=0;i--)delete tmp;
delete tmp;
elem--;pysto++;
return true;
}
кто умный, скажите дураку, что не так...
Теперь вопрос. Ниже представлен код удаления элемента из данной структуры. при удалении mass у меня возникает ошибка. Напротив последней строки выполнения комментарий ОШИБКА!!!. По каким причинам это происходит? уже почти 2 недели пытаюсь исправить, но ничего не выходит...
elem - кол-во элементов в структуре
max_size - длина "строки"
scount - кол-во "строк"
mass - двумерный массив указателей.
параметр метода num - номер удаляемого.
Код:
Извиняюсь, что побеспокоил... Тема уже не актуальна, я нашел другой выход... однако если кто-то объяснит что не так, буду очень рад!
ну во-первых delete для массивов пишется по другому: delete[]