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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Одномерные массивы теория http://www.cyberforum.ru/cpp-beginners/thread705047.html
Дано: В массиве двухбайтовых чисел, содержащем N элементов найти минимальное и максимальное значение и поменять их местами. Можно ли сначала найти минимальный элемент путем сравнения первого элемента с последующими, не создавая при этом переменную минимум = 1. значение найденного элемента и его номер храним в созданных для этого переменных. Такой же алгоритм алгоритм использовать для поиска...
C++ Программа с указателями не компилируется Не хочет компилороваться. Чувствую что с указателями что-то намудрил. Подскажите что именно не так. #include <stdio.h> #include <string.h> int main() { int *Num_a, *Num_b; int a = 0, b = 0; Num_a = &a; http://www.cyberforum.ru/cpp-beginners/thread705044.html
Массивы теория C++
Дано: В массиве двухбайтовых чисел, содержащем N элементов найти минимальное и максимальное значение и поменять их местами. Можно ли сначала найти минимальный элемент путем сравнения первого элемента с последующими, не создавая при этом переменную минимум = 1? Такой же алгоритм впоследствии использовать для поиска максимального элемента.
Седловые точки матрицы C++
Найти седловые точки матрицы. Седловой точкой называется элемент, являющийся минимальным в строке и максимальным в столбце. Я тут что-то написал, не понимаю какие именно ошибки. #include <iostream> #include <conio.h> #include <cstdlib> using namespace std; int main() {
C++ В массиве X определить количество элементов меньших среднего ариф*метического значения http://www.cyberforum.ru/cpp-beginners/thread705021.html
В массиве X определить количество элементов меньших среднего ариф*метического значения. Не упорядочивая массив удалить из него элемен*ты, расположенные между максимальным и минимальным.
C++ В чем смысл указателей? Дорогие друзья, не могу понять смысл указателей в С++? Для чего они нужны? Если не трудно на реальном примере объясните ,пожалуйста. подробнее

Показать сообщение отдельно
sword7i
3 / 3 / 0
Регистрация: 25.09.2012
Сообщений: 92
22.11.2012, 00:29     Найти ошибку в функции
Само задание: Дан массив из М целых чисел. Если в массиве есть хотя бы одно простое число, сформировать новый массив, поместив в него из исходного массива только простые числа.
Необходимо реализовать с динамическим выделением памяти.

Программа работает правильно, но только ОДИН РАЗ! (чтобы заработало снова нужно перезапустить 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 []
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru