ERRORE DI SEGMENTAZIONE C++
ERRORE DI SEGMENTAZIONE C++
Salve a tutti, frequento il primo anno di università in informatica e come tale, a casa mi esercito molto in programmazione c++, ma ogni tanto inciampo in problemi che non sempre riesco a vedere o addirittura a risolvere, causa la mia inesperienza.
Il problema di oggi è questo : scrivere una funzione che riceve una matrice di tipo char[][5] ed il numreo di righe limite_1 e determina se c'è un carattere che è presente in tutte le righe della matrice.
Allora io il programma l'ho abbozzato, ma quando inserisco i caratteri nell"array (supponendo di aver messo come limite righe un numero maggiore di 2 ) mi da errore di segmentazione, io so cos'è questo errore, ma non riesco a capire dove sbaglio nel programma, se voi riusciste a darmi una mano, facendomi capire dove sbaglio, sarei veramente contento, in quanto mi da molto fastidio non riuscire a capire l'errore e comunque trovo molto interessante confrontarmi con voi tutti!
questo è il mio programma :
#include
using namespace std;
char trova(char C[][5],int limite_1)
{
char *punt_ele=C[0];
bool fine=false;
for(int j=0;j> x;
cout > C[j];
}
}
cout<<"array pieno "<<endl;
trova(C,x);
}
Il problema di oggi è questo : scrivere una funzione che riceve una matrice di tipo char[][5] ed il numreo di righe limite_1 e determina se c'è un carattere che è presente in tutte le righe della matrice.
Allora io il programma l'ho abbozzato, ma quando inserisco i caratteri nell"array (supponendo di aver messo come limite righe un numero maggiore di 2 ) mi da errore di segmentazione, io so cos'è questo errore, ma non riesco a capire dove sbaglio nel programma, se voi riusciste a darmi una mano, facendomi capire dove sbaglio, sarei veramente contento, in quanto mi da molto fastidio non riuscire a capire l'errore e comunque trovo molto interessante confrontarmi con voi tutti!
questo è il mio programma :
#include
using namespace std;
char trova(char C[][5],int limite_1)
{
char *punt_ele=C[0];
bool fine=false;
for(int j=0;j> x;
cout > C[j];
}
}
cout<<"array pieno "<<endl;
trova(C,x);
}
Re: ERRORE DI SEGMENTAZIONE C++
Codice: Seleziona tutto
#include<iostream>
using namespace std;
char trova(char C[][5],int limite_1)
{
char *punt_ele=C[0];
bool fine=false;
for(int j=0;j<5 && !fine;j++)//questo seleziona il carattere da confrontare con il resto dell'array;
{
bool ok=true;//ok mi serve per capire se l'elemento è stato trovato
for(int k=0;k<limite_1 && ok;k++)//seleziona la riga dove controllare il carettere
{//se nella riga non è presente l'elemento richiesto, cambia subito carattere in C[0][j]
ok=false;//qui è false in quanto z appena vede C[0][j]== C[k][z] fa diventare ok=true, e quindi non serve che controlla la prossima posizione
for(int z=0; z<5 && !ok;z++)//seleziona la colonna scorrendo la riga
{//quando ok=true vuol dire che deve cambiare riga in k, per confrontare l'elemento con la prossima riga
if((!ok) && (C[0][j]==C[k][z]))
{
ok=true;
*punt_ele=C[0][j];
}
if ((k==limite_1-1) && ok)
{
cout<<" l'elemento comune nell'array è : "<<*punt_ele<<endl;
fine=true;
}
}
}
}
}
main()
{
char C[][5]={};
int x;
cout <<"inserire limite array"<<endl;
cin>> x;
cout <<"inserire caratteri array"<<endl;
for (int i=0;i<x;i++)
{
for (int j=0;j<5;j++)
{
cin >> C[i][j];
}
}
cout<<"array pieno "<<endl;
trova(C,x);
}EDIT: eheh qui sopra risultano uguali ma io ho scritto
Codice: Seleziona tutto
cin >> C[i][j];Codice: Seleziona tutto
cin >> C[j]
Ultima modifica di Anonymous il giovedì 29 marzo 2012, 15:20, modificato 1 volta in totale.
Re: ERRORE DI SEGMENTAZIONE C++
grazie per l'informazione, comunque anche dopo quest'ultima correzione, l'errore persiste!
avevo provato a mettere come limite dell'array 10 "giusto per", e poi mi sono dimenticato!
cmq grazie mille
avevo provato a mettere come limite dell'array 10 "giusto per", e poi mi sono dimenticato!
cmq grazie mille
Re: ERRORE DI SEGMENTAZIONE C++
curioso... a me funziona! nessun segmentation fault. Di solito comunque questo errore succede se cerchi di scrivere "fuori da un vettore". A me comunque il programma gira.
Ultima modifica di Anonymous il giovedì 29 marzo 2012, 16:21, modificato 1 volta in totale.
Re: ERRORE DI SEGMENTAZIONE C++
allora partendo dal fatto che la prima riga fa da padrona di tutto il programma, se mettessi un array lungo come una colonna, che mi dice con true se è stato trovato il carattere in questione ,arrivato all'ultimo booleano vero vorrei che la condizione mi porta ad identificare il carattere comune...ossia :
bool T[limite_1]={};
controlla se C[0][j]==C[k][z] se questo è uguale, allora finisce il ciclo di z e cambia riga con k, intanto il booleano è diventato vero, quindi nella posizione T[k]=vero;
quando ha controllato tutte le righe di k,T[k] avrà al suo interno booleani veri o falsi, supponendo che abbia tutti veri, vuol dire che il carattere C[0][j] è presente almeno una volta, in tutte le righe dell'array, risolvendo il mio problema! ecco io voglio sapere quest'ultima parte come scriverla nel programma.
ossia quando l'array di booleani ha tutte le 5 righe T[k]==vere il carattere C[0][j] è quello ricercato!
bool T[limite_1]={};
controlla se C[0][j]==C[k][z] se questo è uguale, allora finisce il ciclo di z e cambia riga con k, intanto il booleano è diventato vero, quindi nella posizione T[k]=vero;
quando ha controllato tutte le righe di k,T[k] avrà al suo interno booleani veri o falsi, supponendo che abbia tutti veri, vuol dire che il carattere C[0][j] è presente almeno una volta, in tutte le righe dell'array, risolvendo il mio problema! ecco io voglio sapere quest'ultima parte come scriverla nel programma.
ossia quando l'array di booleani ha tutte le 5 righe T[k]==vere il carattere C[0][j] è quello ricercato!
-
1001001
- Entusiasta Emergente

- Messaggi: 1506
- Iscrizione: mercoledì 22 dicembre 2010, 18:09
- Desktop: Unity
- Distribuzione: Ubuntu 14.04.1 LTS 64bit
- Località: Verona
Re: ERRORE DI SEGMENTAZIONE C++
ciao!
l'errore è a monte, quando dichiari l'array. Per avere un array di dimensione variabile, puoi:
1) usare un vector:
2) usare "a mano" new e delete (dico a mano, perchè poi in realtà il vector usa new e delete, ma in automatico)
nota che devi anche cambiare l'header della funzione trova:
l'errore è a monte, quando dichiari l'array. Per avere un array di dimensione variabile, puoi:
1) usare un vector:
Codice: Seleziona tutto
vector<vector<char> > C;Codice: Seleziona tutto
char **C;
int x;
cout <<"inserire limite array"<<endl;
cin>> x;
C = new char* [x];
for (int i=0; i<x; i++)
C[i] = new char [5];
[.....]
for (int i = 0; i<x; i++)
{
delete [] C[i];
}
delete [] C;Codice: Seleziona tutto
char trova(char **C,int limite_1)"I find your lack of faith disturbing."
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti
