Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 6489
Последний выпуск: 19.06.2015

Проблема с удалением динамического массива

78K
22 мая 2012 года
svitozar
11 / / 21.05.2012
Нужно записать множество элементов,которые могут повторяться в два массива : основание(различные элементы) и кратности(сколько раз эти элементы входят в мн-во).
Это задание мой код делает.Но возникает ошибка при удалении массивов.

Код такой :

#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



Помогите пожалуйста.
2.1K
22 мая 2012 года
disputant
95 / / 28.05.2007
Нефиг память портить.
Что такое, в вашем понимании, присвоение 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;
}
78K
22 мая 2012 года
svitozar
11 / / 21.05.2012
у меня нет М=а. оно просто M=a так скопировало)
мой код работает.делает то,что должен.
но при удалении динамического массива ошибка((
и не удалаять-не вариант.
2.1K
22 мая 2012 года
disputant
95 / / 28.05.2007
Ну, как скопировало, такой и ответ...

Приведите НОРМАЛЬНЫЙ исходник (есть же кнопка вставки листинга! нет, надо обязательно в неудобочитаемом виде воткнуть...), иначе нет никакого смысла гадать, где и какой код принят за код форматирования... Хотите получить ответ на вопрос - задавайте его корректно.

И вообще - выделять память в одном месте (например, до вызова main(), как в случае K, а удалять в другом - всегда чревато...

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог