Template of functions

The program report me an error in run-time..

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream>
using namespace std;

template <class tipo, class tipo1> class vettore {
private:
int dim;
tipo* array;
tipo1* array1;

public:
vettore(int);
~vettore(void);
void inserisci(void);
void stampa(void);
};

template <typename tipo, typename tipo1> void assegna(tipo&, tipo, tipo1&, tipo1);
template <class tipo> void scambia(tipo&, tipo&);

int main() {

int x;
string y;

int a = 10;
string b = "ciao";

vettore <string, int> c(2);
vettore <string, int> d(2);

c.inserisci();
d.inserisci();

c.stampa();
d.stampa();

assegna(x, a, y, b);
scambia(c, d);

c.stampa();
d.stampa();

cout << x << endl;
cout << y << endl;

system("pause");
}

template <typename tipo, typename tipo1> void assegna(tipo& x, tipo a, tipo1& y, tipo1 b) {
x = a;
y = b;
}

//COSTRUTTORE
template <class tipo, class tipo1> vettore <tipo, tipo1> :: vettore(int d)
{
dim = d;
array = new tipo[dim];
array1 = new tipo1[dim];
}

//DISTRUTTORE
template <class tipo, class tipo1> vettore <tipo, tipo1> :: ~vettore(void)
{
delete[] array;
delete[] array1;
}

template <class tipo, class tipo1> void vettore <tipo, tipo1> :: inserisci(void)
{
cout << "- Vettore di string -" <<endl;
for (int i = 0; i < dim; i++) {
cout << "Inserisci l'elemento alla posizione "<< i <<" : ";
cin >> array[i];
}
cout << endl;
cout << "- Vettore di interi -" <<endl;

for (int i = 0; i < dim; i++) {
cout << "Inserisci l'elemento alla posizione "<< i <<" : ";
cin >> array1[i];
}
}

template <class tipo, class tipo1> void vettore <tipo, tipo1> :: stampa(void)
{
cout<<endl;
cout << "Vettore di string:" <<endl;
for (int i = 0; i < dim; i++) {
cout << " ";
cout << array[i];
}
cout<<endl<<endl;
cout << "Vettore di interi:" <<endl;
for (int i = 0; i < dim; i++) {
cout << " ";
cout << array1[i];
}
cout<<endl<<endl;
}

template <class tipo> void scambia(tipo& x, tipo& y) {
tipo temp = x;
x = y;
y = temp;
} 
Last edited on
I executed it. For loop in stampa is accessing a member outside array range. It is related to your scambia function, so that accesign element.at(0) already results in segfault. Also, it would be really nice if you translated it before posting :)

Thanks!!
Topic archived. No new replies allowed.