begin process at 2010 02 10 07:22:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

Problèle d'allocation mémoire sur un tableau


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

Problèle d'allocation mémoire sur un tableau

jeudi 25 juin 2009 à 14:13:01 | Problèle d'allocation mémoire sur un tableau

guiltyspark

Bonjour,

J'ai un problème d'allocation mémoire sur un tableau. J'alloue le tableau comme ceci :

int i ; // A ce moment du code, il vaut 4000
double* data_values;

data_values = (double*)calloc((size_t)i,sizeof(double));

// Je ne pense pas avoir fait d'erreur jusque la, mais apres, quand je fais un

printf("taille : %d",sizeof(data_values));

// Ca m'affiche taille : 4

Pourriez-vous m'aider svp ?

Merci d'avance !
jeudi 25 juin 2009 à 14:33:32 | Re : Problèle d'allocation mémoire sur un tableau

Pistol_Pete

Salut
data_value est un pointeur. Donc quand tu fais sizeof d'un pointeur, sur un processeur 32 bits, il te retourne 4 octets. C'est tout à fait normale.
A+

____________________________________________________________________________
Mon site internet :
  
[ Lien ]

jeudi 25 juin 2009 à 14:42:23 | Re : Problèle d'allocation mémoire sur un tableau

guiltyspark

OK mais alors comment je fais pour bien vérifier que mon tableau a une taille correcte ?...

Quand je fais printf("taille : %d",sizeof(*data_values));

Ca me renvoie "taille : 8"...

Merci
jeudi 25 juin 2009 à 15:01:40 | Re : Problèle d'allocation mémoire sur un tableau

Pistol_Pete

Ben oui *data_values est de type double donc 8 octets...

Si l'allocation a échoué alors data_value sera égale à NULL. sinon, il sera égale à l'adresse de ta zone mémoire alloué.
A+

____________________________________________________________________________
Mon site internet :
  
[ Lien ]

jeudi 25 juin 2009 à 22:54:28 | Re : Problèle d'allocation mémoire sur un tableau

guiltyspark

oui mais je voudrais savoir quelle est la taille du tableau sur lequel pointe data_values... Et non pas la taille d'un double...

Un moyen, une idée, un dogue allemand ? ^^
vendredi 26 juin 2009 à 00:39:33 | Re : Problèle d'allocation mémoire sur un tableau

NitRic

Réponse acceptée !
sous Visual C++ il y a:
#include <malloc.h>
size_t _msize(void*);  // renvoie le nombre de byte et non le nombre d'élément

size_t num_of_elems = _msize(data_values) / sizeof(double);

mais sinon, le mieux serait probablement de garder la taille dans une variable ou encore une structure

struct array
{
    double* data;
    size_t num_of_elems;
};

  struct array a;
  a.num_of_elems = 4000;
  a.data = calloc(a.num_of_elems, sizeof(double));

  for (i = 0; i < a.num_of_elems; ++i)
  {
      a.data[i] = x;
  }

tu as le choix ...


~(.:: NitRic ::.)~
vendredi 26 juin 2009 à 09:17:28 | Re : Problèle d'allocation mémoire sur un tableau

guiltyspark

Merci mais il y a un petit problème : je ne peux pas coder sous VC++, je suis sous C::B...
vendredi 26 juin 2009 à 10:24:06 | Re : Problèle d'allocation mémoire sur un tableau

Pistol_Pete

Comme dit NitRic, il suffit de sauvegader le nombre d'élément de ton tableau dans une variable.
C'est le plus simple.
A+

____________________________________________________________________________
Mon site internet :
  
[ Lien ]

vendredi 26 juin 2009 à 10:33:39 | Re : Problèle d'allocation mémoire sur un tableau

guiltyspark

Petit problème, quand je rentre la fonction de NitRic, j'obtiens un magnifique :

Process returned -1073741819 (0xC0000005)   execution time : 0.515 s
Press any key to continue.

Si le debug peut vous aider...

Building to ensure sources are up-to-date
Build succeeded
Selecting target:
Debug
Adding source dir: H:\CodeBlocks\NcComp\NcComp\
Adding source dir: H:\
Adding file: bin\Debug\NcComp.exe
Starting debugger:
done
Registered new type: wxString
Registered new type: STL String
Registered new type: STL Vector
Setting breakpoints
Debugger name and version: GNU gdb 6.7.50.20071127
Child process PID: 3080
Program received signal SIGSEGV, Segmentation fault.
In ntdll!RtlpNtMakeTemporaryKey () (C:\WINDOWS\system32\ntdll.dll)
vendredi 26 juin 2009 à 10:43:54 | Re : Problèle d'allocation mémoire sur un tableau

Pistol_Pete

Le code deNitRic marche sans problème, voila mon programme de test:
#include <malloc.h>

typedef struct TAG_ARRAY
{
    double* data;
    size_t num_of_elems;
}ARRAY,*PARRAY;


int main()
{
    ARRAY a;
  a.num_of_elems = 4000;
  a.data = (double*)calloc(a.num_of_elems, sizeof(double));
    if(a.data==0){
        printf("Erreur allocation\n");
        return 0;
    }
  for (int i = 0; i < a.num_of_elems; ++i)
  {
      a.data[i] = 5;
  }
return 0;
}


Ton problème doit venir d'ailleurs, montre nous ton code, et la ligne ou le debbuger s'arrète.
A+

____________________________________________________________________________
Mon site internet :
  
[ Lien ]


1 2 3

Cette discussion est classée dans : data, tableau, mémoire, allocation, values


Répondre à ce message

Sujets en rapport avec ce message

allocation dynamique d'un tableau à trois dimensions [ par yo62 ] Bonjour,J'ai un bête pointeur dans une structure :int *Tableau;et je voudrais que ce pointeur pointe sur une allocation dynamique de type tableau mais Mémoire partagée et pointeur [ par darsh99 ] Bonjour,J'essai de faire passer un tableau dynamique, un pointeur donc, d'un programme à un autre, l'adresse est bien passée et les champs non dynamiq Allocation dynamique de mémoire (°_°) [ par ceeno ] Bonjour à tous,Je cherche a crée un tableau dont j'augmente la mémoire à chaque fois que je veu y enregistrer une nouvelle valeur.Mais je n'y arrive p Exception et Allocation Mémoire [ par magic_Nono ] Bonjour,G réalisé une classe pour gérer mes exception.http://www.cppfrance.com/code.aspx?ID=19671Cette classe comporte une chaine de caractère...Mais ALLOCATION TABLEAU DEUX DIMENSIONS [ par tomsawyerbelgique ] Bonjour ,j'aimerais bien allouer dynamiquement de la mémoire pour un tableau a deux dimensions. Je demanderais le nombre de ligne et de colonne puis j Allocation méoire [ par pac2 ] Salut,Dans un de mes programmes je déclare des tableaux de nombres à double précision à 3 dimensions. Je déclare en fait 6 tableaux "double tab[30][30 prd de fuite mémoire. [ par gyzmo1 ] Salut à tous, dans mon programme je dois utiliser beaucoup de matrice et donc pas mal d'allocation dynamique. Je desalloue regulièrement mes tableaux( allocation mémoire [ par imanewin32 ] je demande à mon prog d'allouer 40 caractère pour un char*et l'allocation se fait tjrs sur seulement 4 caractèrespourquoi? Allocation de mémoire [ par vecchio56 ] Je dois faire des petites allocations de mémoire pour des structures de quelques octets. Quelle fonction devrais-je utiliser? HeapAlloc, LocalAlloc, V Probleme d'allocation de mémoire dynamique (malloc/free) [ par PhantomPowaa ] Bonjour,J'ai un petit probleme avec les fonctions malloc et free dans certains de mes programmes. Apparement le malloc s'effectue correctement, mais a


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,733 sec (3)

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