C++, Run-Time Check Failure #2

di il
4 risposte

C++, Run-Time Check Failure #2

Salve a tutti, ho da poco iniziato ad utilizzare C++ e non riesco a risolvere questo esercizio.

ESERCIZIO:

Nella funzione mai, dichiarare:
- a di tipo vettore di 5 int;
- b di tipo vettore di 5 int;
- c di tipo vettore di 5 int;
Per ogni i?{0,…,5}, se a e b sono distinti, i valori a e b devono essere inseriti nel vettore c in modo che il minore dei due venga inserito prima del maggiore. La funzione deve copiare nel vettore c al più di 5 valori.

Quando eseguo il programma, inserendo rispettivamente nel vettore A i valori 1, 2, 3, 4, 5 e nel vettore B i valori 6, 7, 8, 9, 10, mi esce il seguente errore: Run-Time Check Failure #2 - Stack around the variable 'c' was corrupted.

SCRITTURA:


#include <iostream>
using namespace std;

int main()
{
	int a[5], b[5], c[5];
	int i, j = 0, z = 0;
	cout << "Inserisci 5 valori nel vettore A " << endl;
	for (i = 0; i < 5; ++i)
	{
		cin >> a[i];
	}
	cout << "Inserisci 5 valori nel vettore B " << endl;
	for (i = 0; i < 5; ++i)
	{
		cin >> b[i];
	}
	for (i = 0; i < 5; ++i)
	{
		while (j < 5)
		{
			if ((a[i] != b[i]) && (a[i] > b[i]))
			{
				c[j] = b[i];
				++j;
				c[j] = a[i];
				++j;
			}
			else if ((a[i] != b[i]) && (a[i] < b[i]))
			{
				c[j] = a[i];
				++j;
				c[j] = b[i];
				++j;
			}
			++i;
		}
	}
	cout << "I valori nel vettore C sono " << endl;
	for (j = 0; j < 5; ++j)
	{
		cout << c[j] << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}
Cosa sbaglio? Grazie!

4 Risposte

  • Re: C++, Run-Time Check Failure #2

    Dato che i tuoi array sono da 5, non è un'idea brillantissima incrementare j di due operazioni per volta senza controlli in mezzo: e se j iniziasse da 4?
    Se a == b quando esci dal while (j < 5)?
    Quante volte incrementi i? Perché incrementi in due punti diversi?
    Conosci l'istruzione break? Non è meglio utilizzare quella quando j supera 4, al posto del while?

    p.s.:

    				
    c[j] = b[i];
    ++j;
    si scrive
    c[j++] = b[i];
  • Re: C++, Run-Time Check Failure #2

    Grazie per la risposta.
    Che controllo intermedio potrei eseguire?
    L'istruzione break sinceramente non la conosco, riesci a darmi qualche informazione?
  • Re: C++, Run-Time Check Failure #2

    
    	for (i = 0; i < 5; ++i){
    			if (a[i] > b[i]){
    				c[j++] = b[i];
    				if(j > 4)
    				   break;
    				c[j++] = a[i];
    				if(j > 4)
    				   break;
    			}
    			else if (a[i] < b[i]){
    				c[j++] = a[i];
    				if(j > 4)
    				   break;
    				c[j++] = b[i];
    				if(j > 4)
    				   break;
    			}
    	}
    
  • Re: C++, Run-Time Check Failure #2

    Grazie mille!
Devi accedere o registrarti per scrivere nel forum
4 risposte