Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sword7i
3 / 3 / 0
Регистрация: 25.09.2012
Сообщений: 92
#1

Найти ошибку в функции - C++

22.11.2012, 00:29. Просмотров 288. Ответов 3
Метки нет (Все метки)

Само задание: Дан массив из М целых чисел. Если в массиве есть хотя бы одно простое число, сформировать новый массив, поместив в него из исходного массива только простые числа.
Необходимо реализовать с динамическим выделением памяти.

Программа работает правильно, но только ОДИН РАЗ! (чтобы заработало снова нужно перезапустить Visual Studio). Когда ввожу новые значения массива прога ругается и пишет о какой-то ячейки памяти. Помогите найти ошибку. Вот код:
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
using namespace std;
int* vvod(int n);
void vivod(int* mas,int& k);
int* obrabotka(int* mas,int n,int& k);
void main()
{   
    setlocale (LC_ALL, "Russian");
    char ans;
    do
    {
        int n,k=-2;
        cout<<"Введите количество элементов массива: ";
        cin>>n;
        cout<<endl;
        int* mas=vvod(n);
        int* masNew;
        cout<<endl<<endl<<"Исходный массив: "<<endl;
        vivod(mas,n);
            if (obrabotka(mas,n,k))
            {
                masNew=obrabotka(mas,n,k);
                cout<<endl<<endl<<"Новый массив из простых чисел: "<<endl;
                vivod(masNew,k);
                delete [] masNew;
                delete [] mas;
            }
            else
            {
                cout<<endl<<endl<<"Простых чисел среди элементов массива нет! Новый массив не будет создан!";
                delete [] mas;
            }
        cout<<endl<<endl<<endl<<"Повторить? (y/n): ";
        cin>>ans;
        cout<<endl<<endl;
    }
    while (ans=='y');
}
fun.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
bool isprost(int* mas,int j)
{
    for (int i=2;i*i<=mas[j];i++)
    {
        if (mas[j]%i==0)
        return 0;
    }
    return 1;
}
int* obrabotka(int* mas,int n,int& k)
{
    int prost=0;
        for (int j=0;j<n;j++)
        prost=prost+isprost(mas,j);
    if (prost)
    {
        int* masNew=new int[prost];
        for (int i=0;i<n;i++)
        {
            if (isprost(mas,i))
            {
                masNew[k]=mas[i];
                k++;
            }
        }
        return masNew;
    }
    else
        return 0;
}
vvodvivod.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int* vvod(int n)
{
    int* mas;
    mas=new int[n];
    for (int i=0;i<n;i++)
    {
        cout<<"Введите "<<i+1<<"-й элемент массива: ";
        cin>>mas[i];
    }
    return mas;
}
void vivod(int* masNew,int& k)
{
    for (int i=0;i<k;i++)
    {
        cout<<endl<<i+1<<"-й элемент: "<<masNew[i];
    }
}
Добавлено через 39 минут
Так и не разобрался. Видимо память не очищается после выполнения функции, хотя я использовал delete []
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2012, 00:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти ошибку в функции (C++):

Найти ошибку в функции - C++
int&amp; f(){ int *a=new int; return *a; } скопилировал-ошибок нет...но тут ясно что не очищается памяь,знаю...надо делете...

Не могу найти ошибку в функции - C++
не могу найти ошибку, помогите очень срочно надо. вот код #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include...

Функции (найти ошибку в коде) - C++
Ребят помогите найти ошибку пожалуйста, не хочет запускаться. #include &lt;iostream&gt; #include &lt;conio.h&gt; const int M = 3; ...

Найти ошибку в перегруженной функции - C++
Почему-то произведению присваивется размер массива. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include...

Найти ошибку в вызове функции. - C++
Подскажите, что не так, независимо от того, какую операцию выбираю: 1 или 2(байты в биты или биты в байты), выполняется одно и тоже (байты...

Указатели на функции, найти ошибку в коде - C++
Доброго времени суток. Мне нужен массив указателей на функции. Компилятор выдает ошибку, не могу понять, в чем она заключается. ...

3
Croessmah
Эксперт CЭксперт С++
13415 / 7566 / 855
Регистрация: 27.09.2012
Сообщений: 18,618
Записей в блоге: 3
Завершенные тесты: 1
22.11.2012, 00:37 #2
Во-первых, у Вас утечка памяти тут:
C++
1
2
3
            if (obrabotka(mas,n,k))
            {
                masNew=obrabotka(mas,n,k);
Во-вторых, k=-2 и при вызове функции обработки у Вас получается
C++
1
masNew[-2]=mas[i];
В-третьих, буфера наружу выдавать не хорошо.
1
sword7i
3 / 3 / 0
Регистрация: 25.09.2012
Сообщений: 92
22.11.2012, 01:05  [ТС] #3
Croessmah, спасибо исправил. А про буфера можно поподробнее?
0
Croessmah
Эксперт CЭксперт С++
13415 / 7566 / 855
Регистрация: 27.09.2012
Сообщений: 18,618
Записей в блоге: 3
Завершенные тесты: 1
22.11.2012, 01:12 #4
Цитата Сообщение от sword7i Посмотреть сообщение
А про буфера можно поподробнее?
В том смысле, что забота о удалении памяти должна быть на той же функции, которая эту память выделяет, ну если, конечно, же нет весомых причин выдавать указатель на эту память.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2012, 01:12
Привет! Вот еще темы с ответами:

Найти ошибку в коде функции поиска - C++
не могу найти ошибку, помогите, кто может?( ошибка в поиске) #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;io.h&gt; #include...

Помогите найти ошибку в функции сортировки выбором - C++
Хотел реализовать так чтобы в функции шла сортировка выбором но когда хочу чтоб на экран вывелся весь отсортированный массив то выводиться...

Программа вычисляющая значение функции. не могу найти ошибку - C++
привет!)) помогите пожалуйста найти ошибку в программе. #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include...

Найти ошибку в функции вычисления суммы двух матриц - C++
Используя функции заполнить матрицы случайными числами. Функцию, вычисляющую сумму двух матриц. Вывести на экран две исходные матрицы и их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
22.11.2012, 01:12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru