PDA

Visualizza la versione completa : [C] Funzione di "swap" che manda in crash l'applicazione


Lasentinella
28-04-2007, 16:09
Ciao a tutti!
Sto realizzando una semplice funzione di swap che scambi due numeri contenuti in un array (sto provando ad utilizzare i puntatori, questo che mi d problemi).
Il codice questo:



void swap(int *pa, int *pb){
int papp;
papp=*pa;
*pa=*pb;
*pb=papp;
}


e la chiamata questa:

swap(&v[i],&v[min]);

La compilazione a posto; se eseguo il programma, invece, spunta un errore di Windows che mi avvisa di un crash del file che ho chiamato "es1".
A quanto pare il crash succede solo se metto il primo numero uguale alla grandezza dell'array...

Qualcuno saprebbe dirmi cosa succede?
Grazie :ciauz: :oVVoVe:

oregon
28-04-2007, 16:20
Originariamente inviato da Lasentinella
A quanto pare il crash succede solo se metto il primo numero uguale alla grandezza dell'array...

Cioe'? Questa frase non e' chiara ...

Dato che l'errore non e' nella funzione swap ma nel resto del programma, devi mostrare quello che manca ...

Lasentinella
28-04-2007, 16:58
Ecco il programma:



#define MAX_LEN 100
#include <stdio.h>
#include <conio.h>
void leggi_vettore(int *v, int n);
void stampa_vettore(int *v, int n);
void selsort(int *v, int n);
int pos_min(int *v, int from, int to);
void swap(int *pa, int *pb);
int main(void)
{
int x[MAX_LEN];
int len;
printf("Lunghezza del vettore: ");
scanf("%d", &len);
leggi_vettore (x,len);
selsort(x,len);
stampa_vettore(x,len);
getch();
}

void leggi_vettore(int *v, int n){
int i;
for(i=0;i<n;i++){
printf("Inserisci il %d numero: ",i);
scanf("%d",&v[i]);
}
}

void stampa_vettore(int *v, int n){
int i;
for(i=0;i<n;i++)
printf("%d",v[i]);
}

void selsort(int *v, int n){
int i, min, app;
for(i=0;i<n;i++){
swap(&v[i],&v[pos_min(v,i,n)]);
}
}

int pos_min(int *v, int from, int to){
int i, min=from;
for(i=from;i<to-1;i++){
if(v[i]<v[min])
min=i;
}
return min;
}

void swap(int *pa, int *pb){
int papp;
papp=*pa;
*pa=*pb;
*pb=papp;
}

oregon
28-04-2007, 18:48
Penso che le funzioni da correggere siano queste



void selsort(int *v, int n){
int i;
for(i=0;i<n;i++)
swap(&v[i],&v[pos_min(v,i,n)]);
}

int pos_min(int *v, int from, int to){
int i, min=from;
for(i=from+1;i<to;i++){
if(v[i]<v[min])
min=i;
}
return min;
}

Lasentinella
28-04-2007, 20:43
Corretto e funziona perfettamente :)
Grazie Oregon !
:ciauz:

Loading