IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Probleme d'affectation de tableaux


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Newbie
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Newbie

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Probleme d'affectation de tableaux
    Bonjour,

    J'ai écrit une dll pour un autre logiciel et il y a un truc que je n'arrive pas à comprendre, peut-être auriez-vous une idée.

    En gros si j'écris la commande rowPtr[q]=I[p-1][o][q]; la dll se construit mais le logiciel plante . Mais si j'effectue une transformation de mon tableau multimensionnel comme suit en conservant la meme taille et que j'ecris rowPtr[q]=J[p-1][o][q]; , alors le logiciel ne plante pas et me donne le resultat avec des matrices transformees.

    Ca ne me gene pas pour la suite mais je ne comprends pas. On dirait que puisque j'ai definit mon I en décrémentant mes indices, je ne peux pas le lire ou l'affecter en l'incrémentant. Enfin je sais pas, à partir du moment où j'ai defini mon tableau je devrais pouvoir affecter les valeurs comme bon me semble.
    Bref mystère pour moi...




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    uint16_t *** get_Images(uint32_t ImageCount,uint32_t ImHeight, uint32_t ImWidth,FILE* fp)
    {
    	uint16_t temp;
    	uint32_t i,j;
    	uint16_t ***I ;
    	I = (uint16_t ***)malloc(ImageCount*sizeof(*I));
    	for(i = 0; i < ImageCount; i++) 
    	{
    		I[i] = (uint16_t **)malloc(ImHeight * sizeof(**I));
    		for(j = ImHeight; j >0; j--) 
    		{
    			I[i][j]=(uint16_t *)malloc(ImWidth * sizeof(***I));
    		}
    	}
    	uint16_t tracks[4];
    	uint32_t o,p;
    	uint32_t q;
    	for (p=0;p<ImageCount;p++)
    	{
    		for(o=ImHeight;o>0;o--)
    		{
    			for(q=0;q<ImWidth;q++)
    			{
    				fread(&temp,2,1,fp);
    				I[p][o][q]=temp;		
    			}
     
    		}
    		fread(&tracks,sizeof(tracks),1,fp);
    	}
     
    	return(I);
    	for(i=0 ; i < ImageCount ; i++)
    	{
    		for(j=ImHeight ; j >0 ; j--)
    		{
    			free(I[i][j]);
    		}
    	}
    	for(i=0 ; i < ImageCount ; i++)
    	{
    		free(I[i]);
    	}
    	free(I);
    }
     
    uint16_t *** transformed_matrix(uint32_t ImageCount,uint32_t ImHeight, uint32_t ImWidth,uint16_t*** I)
    {
    	uint32_t i,j,k;
    	uint16_t ***J ;
    	J = (uint16_t ***)malloc(ImageCount*sizeof(*J));
    	for(i = 0; i < ImageCount; i++) 
    	{
    		J[i] = (uint16_t **)malloc(ImHeight * sizeof(**J));
    		for(j =0 ; j <ImHeight; j++) 
    		{
    			J[i][j]=(uint16_t *)malloc(ImWidth * sizeof(***J));
    		}
    	}
    	for(i=0; i<ImageCount; i++) 
    	{
    		for(j=0;j<ImHeight; j++) 
    		{
    			for(k=0;k<ImWidth;k++)
    			{
    				J[i][j][k]=I[i][ImHeight-j][k];		
    			}
    		}
    	}
     
    	return(J);
     
    	for(i=0 ; i < ImageCount ; i++)
    	{
    		for(j=0 ; j <ImHeight ; j++)
    		{
    			free(J[i][j]);
    		}
    	}
    	for(i=0 ; i < ImageCount ; i++)
    	{
    		free(J[i]);
    	}
    	free(J);
    }
    int main()
    {
    ....
    I=get_Images(cine_file_header.ImageCount,info_setup.ImHeight,info_setup.ImWidth,fp);
    J=transformed_matrix(cine_file_header.ImageCount,info_setup.ImHeight,info_setup.ImWidth,I);
     
    for (p=1;p<cine_file_header.ImageCount+1;p++)
    {
    	SetBufferSize(p,info_setup.ImHeight,info_setup.ImHeight,0);
     
    	for(o=0;o<info_setup.ImHeight;o++)
    	{
    		Word* rowPtr = (Word*)GetBufferRowPtr(p,o);
    		for(q=0;q<info_setup.ImWidth;q++)
    		{
    			rowPtr[q]=J[p-1][o][q];
    		}
    	}
    }
    ....
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    J[i][j][k]=I[i][ImHeight-j][k];
    Lorsque j = 0 (donc, au début de la boucle), l'indice (pour le tableau I) sera ImHeight-0, donc ImHeight. Sauf que la taille du tableau, c'est ImHeight, sachant qu'un ordinateur compte à partir de zéro, vous êtes une case trop loin du tableau
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Newbie
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Newbie

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    J'avoue qu'au début j'avais écrit I[i][ImHeight-1-j][k]; et la dll compilait mais le logiciel plantait, donc j'ai changé intuitivement et je n'y ai plus pensé .

    Donc j'ai compris pourquoi il bug, comme j'ai défini mon I de ImHeight à 0 (for(j = ImHeight; j >0; j--) ), I a des valeurs entre 1 et ImHeight et apres je veux affecter des valeurs entre 0 et ImHeight -1: erreur de m e r d e ( désolé du dérangement).

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Newbie
    Inscrit en
    Juin 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Newbie

    Informations forums :
    Inscription : Juin 2013
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Merci au fait LittleWhite

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/08/2006, 17h10
  2. Problème de déclaration de tableaux
    Par BenjaminLustrement dans le forum C++/CLI
    Réponses: 6
    Dernier message: 23/06/2006, 16h21
  3. [XSLT] probleme pour faire des tableaux html
    Par Lockless dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 16/06/2006, 16h04
  4. Réponses: 6
    Dernier message: 29/05/2006, 20h58
  5. Réponses: 1
    Dernier message: 29/05/2006, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo