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

Проблемка с указателями - C++

Восстановить пароль Регистрация
 
ndrew
0 / 0 / 0
Регистрация: 24.03.2012
Сообщений: 7
24.03.2012, 21:30     Проблемка с указателями #1
Нужно перегрузить "+" чтобы он делал слияние 2ух массивов(элементы не повторялись)
вот код:

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream.h>
#include <stdio.h>
class mas
{int n,*a;
 public:
    mas();
    ~mas();
    void input(int);
    void output();
    mas* operator +(mas);
};
mas::mas()
{n=0;
}
mas::~mas()
{delete []a;}
void mas::input(int f)
{n=f;
 a=new int[n];
 for (int *i=a;i<a+n;i++)
    cin>>*i;
}
void mas::output()
{for (int *i=a;i<a+n;i++)
   cout<<*i<<' ';
}
mas* mas::operator +(mas A)
{int t=0,*j,*i;
 mas *C;
    t=n+A.n;
    C->a=new int[t];
    for (i=a;i<a+n;i++)
    {for (j=A.a;j<A.a+A.n;j++)
          if (*i==*j) break;
          if (j<A.a+A.n) continue;
          for (j=C->a;j<C->a+C->n;j++)
               if (*i==*j) break;
          if (j==C->a+C->n)
               {*j=*i;
           C->n++;
                }
     }
for (j=A.a;j<A.a+A.n;j++)
   {i=C->a;
     *i=*j;
      C->n++;
    }
return C;
}
void main()
{mas AA,BB;
 mas*CC;
 int n,m;
 cout<<"kol-vo elem mas 1";
 cin>>n;
 cout<<endl<<"vvod elementov";
 AA.input(n);
 cout<<"kol-vo elem mas 2";
 cin>>m;
 cout<<endl<<"vvod elementov";
 BB.input(m);
 AA.output();
 cout<<endl;
 BB.output();
 CC=AA+BB;
 CC->output();
 cout<<endl;
}
ошибку выдает в выделении памяти под объект C:
C->a=new int[t];
скорее всего это как-то связано со стрелкой..
Ошибка:Project Project1.exe raised exeption class EAccessViolation with message 'Access violation at adress 00401749'.Write of address 00000004'.
Подскажите как исправить
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2012, 21:30     Проблемка с указателями
Посмотрите здесь:

Проблемка с инициализацией C++
C++ Небольшая проблемка)
C++ Проблемка с массивом
C++ Проблемка
В чем проблемка? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
24.03.2012, 21:34     Проблемка с указателями #2
пишите туда куда писать нельзя, код отформатируйте хотя бы, читать нереально
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,188
Завершенные тесты: 1
24.03.2012, 21:42     Проблемка с указателями #3
C->a везде замените на C.a
ndrew
0 / 0 / 0
Регистрация: 24.03.2012
Сообщений: 7
24.03.2012, 21:59  [ТС]     Проблемка с указателями #4
Цитата Сообщение от zss Посмотреть сообщение
C->a везде замените на C.a
объявлено mas *C ,не получится заменить
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
24.03.2012, 22:04     Проблемка с указателями #5
Память под С не выделена.
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,188
Завершенные тесты: 1
24.03.2012, 23:28     Проблемка с указателями #6
Цитата Сообщение от ndrew Посмотреть сообщение
объявлено mas *C ,не получится заменить
А что Вам мешает поменять объявление на
mas C;
ndrew
0 / 0 / 0
Регистрация: 24.03.2012
Сообщений: 7
25.03.2012, 13:04  [ТС]     Проблемка с указателями #7
Цитата Сообщение от zss Посмотреть сообщение
А что Вам мешает поменять объявление на
mas C;
если поменять то получается не то что надо.при выводе в мейне выводит нули
попробовал выделать память под С:
C=new mas;
ошибку больше не выдает.правда результат все равно не тот получается(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2012, 16:29     Проблемка с указателями
Еще ссылки по теме:

Проблемка C++
Проблемка с exit C++
Проблемка с g++ C++

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,188
Завершенные тесты: 1
25.03.2012, 16:29     Проблемка с указателями #8
Прилагаю осмысленный код Вашего примера.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
using namespace std;
class mas
{int n,*a;
 public:
     mas(int n0=1){n=n0;a=new int[n];}
     mas(mas& mm){n=mm.n;a=new int[n];for(int i=0;i<n;i++)a[i]=mm.a[i];}
    ~mas(){delete[] a;}
    void input();
    void output();
    mas operator +(mas);
    mas& operator=(mas&);
};
void mas::input()
{
    for (int i=0;i<n;i++)
        cin>>a[i];
}
void mas::output()
{
    for (int i=0;i<n;i++)
        cout<<a[i]<<' ';
    cout<<endl;
}
mas mas::operator +(mas A)
{
    int t=0,i;
    mas C(n+A.n);
    for (i=0;i<n;i++)
        C.a[i]=a[i];
    for (i=0;i<A.n;i++)
        C.a[i+n]=A.a[i];
    return C;
}
mas& mas::operator=(mas& mm)
{
    if(n!=mm.n)
    {
        delete[] a;
        a=new int[mm.n];
    }
    n=mm.n;
    for(int i=0;i<n;i++)
        a[i]=mm.a[i];
    return *this;
}
 
void main()
{
    int n,m;
    cout<<"kol-vo elem mas 1?";
    cin>>n;
    mas AA(n);
    cout<<endl<<"vvod elementov:";
    AA.input();
    cout<<"kol-vo elem mas 2?";
    cin>>m;
    mas BB(m);
    cout<<endl<<"vvod elementov:";
    BB.input();
    AA.output();
    cout<<endl;
    BB.output();
    mas CC=AA+BB;
    CC.output();
    cout<<endl;
}
Yandex
Объявления
25.03.2012, 16:29     Проблемка с указателями
Ответ Создать тему
Опции темы

Текущее время: 15:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru