begin process at 2012 05 30 19:04:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

Triage simultané


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Triage simultané

jeudi 23 septembre 2010 à 15:00:26 | Triage simultané

Saros

Membre Club
Bonjour,

J'essaie de trier deux tableaux simultanément, ie. j'ai envie que les opérations faites sur l'un soient faites sur l'autre aussi. Un équivalent de multisort en php.
Je veux passer par la fonction qsort.

Le format de base est un tableau à deux entrées :

int Q[100][2];

la syntaxe pour appeler qsort que j'utilise est :

qsort(Q, 100, sizeof(int*), comp);


Mais j'ai un souci avec la fonction de comparaison. J'ai abouti au code suivant :

int comp(const void* a, const void* b){
int* ia = *((int**) a);
int* ib = *((int**) b);
return ia[0] - ib[0];
}

qui compile, mais génère un segfault.
Mon raisonnement est que vu que les valeurs du tableaux (qui sont des int*) sont transmis via leur adresse, il faut les typecaster en int**, puis récupérer leur valeur par déférencement. D'où le *((int**) x).

Quelqu'un peut m'indiquer d'où vient l'erreur ?

Saros
jeudi 23 septembre 2010 à 15:54:21 | Re : Triage simultané

Saros

Membre Club
Problème résolu,

Pour une raison obscure, le problème a l'air de provenir de la définition qu'on utiliser de Q.

Lorsqu'on écrit :
int* Q[100];

puis

for(int i=0 ; i<100 ; i++){
Q[i] = (int*)malloc(3*sizeof(int));
}

le reste du code fonctionne bien.
Si quelqu'un a une idée de l'origine exacte du souci, je suis preneur :)
Merci.

Saros
jeudi 23 septembre 2010 à 18:12:50 | Re : Triage simultané

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Tu ne peux pas caster un [][] en un **.
Ce n'est pas la même chose, et c'est donc normal que ça plante.

En revanche, un []* et un ** sont compatibles. C'est pour cela que ton 2eme code fonctionne.

[][] implique que les données sont contigües, tandis qu'avec un **, les données sont éparpillés.

Ex:
tab[2][3] donnera graphiquement:


[0,0,0,......] (données dans ta RAM)
[0,0,0][0,0,0]
[0,0,0,......] (données dans ta RAM)


et
tab** (avec une allocation de 2,3) donnera graphiquement:


[.] =----->[0,0,0]
[.] =+.....[0,0,0,... (données dans ta RAM)
.....|.....[0,0,0,... (données dans ta RAM)
.....+---->[0,0,0]



Je ne sais pas si mes dessins sont très clairs, mais c'est la raison.
(Pour ceux qui vont critiquer mes dessins, oui j'ai vulgarisé, c'est pas tout à fait juste).

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 23 septembre 2010 à 18:49:37 | Re : Triage simultané

Saros

Membre Club
Okay. Ça explique les quelques tests que j'avais fait en débuggant
Les dessins sont clairs (pour moi en tout cas)
Merci beaucoup pour ta réponse :)

Saros


Cette discussion est classée dans : int, tableaux, simultané, triage, qsort


Répondre à ce message

Sujets en rapport avec ce message

Pb Tableaux et initialisation. [ par AstraDeon ] Bonjour,Voila je tentais une simple initinitialisation d'un tableau bidimensionnel, mais j'ai pas le resultat escomptsS, voici le code :#include int m tableaux multidimentionnels [ par vecchio56 ] j'ai une petite question à propos des tableaux multidimentionnels: comment doit on déclarer un argument formel pour un tableau de ce type dans une fon fonction qsort [ par rems38 ] bonjour,pouvez vous me dire ce que fais ds les grandes lignes:  int i; for(i=0;iglodata.NtypTh;i++)  ISortedThCost[i]=i;  qsort((void*)&ISortedThCost, Création de 2 tableaux dynamik à 2D [ par flopflopp ] Bonjour, je voudrais soumettre un petit problème en C++, j'ai une simple fonction qui crée un tableau dynamique à 2 dimensions, le rempli avec des 1 e Problèmes tableaux [ par Squallgamer ] Voila j'ai un exo en C et j'ai un peu de mal a faire les deux dernières question. J'ai beau cherché je vois pas trop la solution, je fais donc apelle tableaux en C-ANSI [ par goast_tu ] Salut! J'ai une petite question. Est ce que en C-ANSI il est autorisé de faire une declaration de tableau avec une taille definie par une variable ? P Qsort sur une ligne d'un tableau 2d [ par thespartan ] Bonjour.Jai un tableau des x,y,z de N éléments. J'aimerais trier ce tableau selon sa 3ème ligne par ordre croissant or quand j'appele qsort, il le fai Question simple sur les tableaux [ par LordBob ] Bonjours a tous,pourquoi quand j'écris le code ci-dessous:#include int main(){ int i; char tab[6] = "bonjour"; for (i Hachage fermé problème de lecture [ par mcflysupersonic ] Bonjour je suis nouveau sur le forum est ceci est ma première question donc j'espère que je ne me suis pas trompé d'endroit pour poster.Voilà j'ai un


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,794 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales