Errore bad access

di il
16 risposte

Errore bad access

#include <stdio.h>
char *cantor(char[], int, int);


int main() {

char v[27];

for(int i = 0; i<27; i++){
v[i] = ' ';

}

cantor( v, 0, 26);




return 0;
}

char *cantor(char str[], int posizioneInizioStringa, int posizioneFineStringa){

if(posizioneFineStringa == posizioneInizioStringa ){
return str;

}

int a = (posizioneFineStringa + 1)/3;


for(int i=0; i<a; i++){
str = '#';

}

cantor(str, 0, a);

for(int i=a; i<2*a; i++){
str = '.';

}

cantor( str, a, 2*a);

for(int i = 2*a; i<posizioneFineStringa; i++){
str = '#';
}

cantor(str, 2*a, posizioneFineStringa);



return str;

}

ho fatto questo codice ma quando lo faccio andare mi dà thread exc bad access e non capisco perché.
Qualcuno mi sa aiutare?
questo sotto è il testo dell'esercizio



Una stringa (di lunghezza a piacere) che contiene solo caratteri ?#? e ?.? può essere una rappresentazione della così-detta polvere di Cantor (mono-dimensionale) se costruita nel modo seguente:
1. si pensa il numero di celle della stringa come diviso in tre parti, ciascuna della stessa lunghezza (a meno di un carattere in aggiunta o in difetto)
2. le celle delle parti a sinistra e a destra vengono riempite con caratteri ?#?
3. le celle della parte centrale vengono riempite con caratteri ?.?
4. Ciascuna parte contenente i ?#? viene modificata come descritto nei punti 1., 2., 3. (cioé divisa
in tre parti, con le parti esterne contenenti ?#? e quella centrale contenente ?.? ), ...., ricorsivamente fino ad arrivare ad avere “parti” composte da zero oppure una singola cella.
Esempio: un array di caratteri con 9 celle contenete polvere di cantor è: #.#...#.#
Scrivere sottoprogramma che, preso un array di caratteri, lo riempia come una stringa che rappresenta la
polvere di Cantor. Scrivere un programma main() che visualizza la stringa creata dal sottoprogramma.
Suggerimento:
...Cantor(char str[],
int posizioneInizioStringa,
int posizioneFineStringa)

16 Risposte

  • Re: Errore bad access

    Devi usare i tag code per il codice o non si capisce nulla. Leggi tutto il regolamento prima di postare sul forum.
  • Re: Errore bad access

    Ho risolto
  • Re: Errore bad access

    CaneNero ha scritto:


    
    char v[27];
    
    for(int i = 0; i<27; i++){
    *v = ' ';
    }
    
    Per scrivere una cosa del genere vuol dire che non hai studiato niente.

    Studia almeno le basi di array e puntatori, poi ti si può dare una mano
  • Re: Errore bad access

    Crossposting http://m.pierotofy.it/p/forum/2/1065577-problema_con_ricorsione/
  • Re: Errore bad access

    Quindi qualcuno sa risolvere il problema di segmentazione fault?
    il codice l'ho modificato
  • Re: Errore bad access

    Ti si è già detto che devi studiare prima, altrimenti è tutto inutile

    Cosa vuol dire secondo te questo?
    for(int i=0; i<a; i++){
    str = '#';
    }
  • Re: Errore bad access

    Tranquillo ho risolto e ora il codice è giusto
  • Re: Errore bad access

    Bene che ti hanno aiutato sull'altro forum.

    Qual è la soluzione?
  • Re: Errore bad access

    Veramente sull'altro forum ha chiesto il codice pronto fatto da un altro utente...
  • Re: Errore bad access

    Ma perché parlate? ho risolto con un mio amico dato che su nessun forum me l'hanno inviato, sapientoni
  • Re: Errore bad access

    L'errore stava nel non tenere conto di uno spazio per il carattere terminatore, ma siccome voi due siete due fenomeni che non si sprecano per gli altri ho dovuto chiedere aiuto a un mio amico :')
  • Re: Errore bad access

    Nemmeno tu ti sprechi per gli altri non postando la soluzione, mi pare...
  • Re: Errore bad access

    Una persona me l'ha già chiesta per messaggio privato e gliel'ho mandata, comunque se la vuoi così tanto te la mando, ma non vedo a cosa serva a un genio come te
  • Re: Errore bad access

    Sarebbe buona norma postarla per chi legge il thread, così come sarebbe buona norma non fare crossposting, così come sarebbe buona norma non fare polemica con chi ti sta aiutando... sarebbe anche saggio studiare un attimino le basi, altrimenti al prossimo problema sei a piedi allo stesso modo. Ma fai pure come credi
Devi accedere o registrarti per scrivere nel forum
16 risposte