Проблема с удалением динамического массива
Это задание мой код делает.Но возникает ошибка при удалении массивов.
Код такой :
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;
int id=0;
int n;
int* K=new int[n]; //массив-кратности
int main()
{
cout<<"Please enter number of different element in your multiplicity \n";
cin>>n;
char a;
cout<<"Please enter your multiplicity (in the end must be koma) \n";
cin>>a;
char* M=new char[n]; //массив-основание
for(int j=0;j<n;j++)
{
M[j]='-'; //состояние-пусто
}
while(a!=',')
{
int d=0; //идентификатор
int i=0;
while((M!='-')&&(i<=n))
{
if(M==a)
{
d=1;
K++;
}
i++;
}
if((M!='-')&&(i==n))
{
cout<<"Ups. You input more different symbols, that you planed. Try again.";
return 0;
}
if (d==0)
{
M=a;
K=1;
}
cin>>a;
}
cout<<"\n";
if(M[n-1]=='-')
{
cout<<"Ups. You input less different symbols , that you planed. Try again.";
return 0;
}
for(int j=0;j<n;j++)
{
cout<<M[j]<<" ";
}
cout<<"\n";
for(int j=0;j<n;j++)
{
cout<<K[j]<<" ";
}
delete [] M;
delete [] K;
//delete F;
cin.get();
cin.get();
return 0;
}
Ошибки выбивает такие:
ОС Windows инициировала точку останова в Comban.exe.
Это может быть вызвано повреждением кучи и указывает на ошибку в Comban.exe или в одной из загруженных им DLL.
Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит Comban.exe
Помогите пожалуйста.
Что такое, в вашем понимании, присвоение M = a?
Оно у вас и компилироваться-то не должно!
А вообще, достаточно просто отсортировать массив, а потом один раз пройтись по нему...
И, кстати - ну форматируйте же исходники хоть чуть-чуть!
Правда, так лучше:
Код:
#include <iostream>
#include <cstdlib>
using namespace std;
int id=0;
int n;
int* K=new int[n]; //ìàññèâ-êðàòíîñòè
int main()
{
cout<<"Please enter number of different element in your multiplicity \n";
cin>>n;
char a;
cout<<"Please enter your multiplicity (in the end must be koma) \n";
cin>>a;
char* M=new char[n]; //ìàññèâ-îñíîâàíèå
for(int j=0;j<n;j++)
{
M[j]='-'; //ñîñòîÿíèå-ïóñòî
}
while(a!=',')
{
int d=0; //èäåíòèôèêàòîð
int i=0;
while((M!='-')&&(i<=n))
{
if(M==a)
{
d=1;
K++;
}
i++;
}
if((M!='-')&&(i==n))
{
cout<<"Ups. You input more different symbols, that you planed. Try again.";
return 0;
}
if (d==0)
{
M=a;
K=1;
}
cin>>a;
}
cout<<"\n";
if(M[n-1]=='-')
{
cout<<"Ups. You input less different symbols , that you planed. Try again.";
return 0;
}
for(int j=0;j<n;j++)
{
cout<<M[j]<<" ";
}
cout<<"\n";
for(int j=0;j<n;j++)
{
cout<<K[j]<<" ";
}
delete [] M;
delete [] K;
//delete F;
cin.get();
cin.get();
return 0;
}
#include <cstdlib>
using namespace std;
int id=0;
int n;
int* K=new int[n]; //ìàññèâ-êðàòíîñòè
int main()
{
cout<<"Please enter number of different element in your multiplicity \n";
cin>>n;
char a;
cout<<"Please enter your multiplicity (in the end must be koma) \n";
cin>>a;
char* M=new char[n]; //ìàññèâ-îñíîâàíèå
for(int j=0;j<n;j++)
{
M[j]='-'; //ñîñòîÿíèå-ïóñòî
}
while(a!=',')
{
int d=0; //èäåíòèôèêàòîð
int i=0;
while((M!='-')&&(i<=n))
{
if(M==a)
{
d=1;
K++;
}
i++;
}
if((M!='-')&&(i==n))
{
cout<<"Ups. You input more different symbols, that you planed. Try again.";
return 0;
}
if (d==0)
{
M=a;
K=1;
}
cin>>a;
}
cout<<"\n";
if(M[n-1]=='-')
{
cout<<"Ups. You input less different symbols , that you planed. Try again.";
return 0;
}
for(int j=0;j<n;j++)
{
cout<<M[j]<<" ";
}
cout<<"\n";
for(int j=0;j<n;j++)
{
cout<<K[j]<<" ";
}
delete [] M;
delete [] K;
//delete F;
cin.get();
cin.get();
return 0;
}
мой код работает.делает то,что должен.
но при удалении динамического массива ошибка((
и не удалаять-не вариант.
Приведите НОРМАЛЬНЫЙ исходник (есть же кнопка вставки листинга! нет, надо обязательно в неудобочитаемом виде воткнуть...), иначе нет никакого смысла гадать, где и какой код принят за код форматирования... Хотите получить ответ на вопрос - задавайте его корректно.
И вообще - выделять память в одном месте (например, до вызова main(), как в случае K, а удалять в другом - всегда чревато...