Bonjour,
Voilà une question très con certainement... mais il faudrait bien que j'arrive à faire fonctionner les tableaux dynamiques une bonne fois pour toute au lieu de galérer à chaque fois à me demander ce que j'ai fait de pas bien.
Désolée par avance si vous trouvez que ma question a sa réponse dans la FAQ ou dans n'importe quel cours de C++...mais voilà, chez moi, ya toujours un problème avec la mémoire, même quand j'ai l'impression d'avoir fait comme dans les exemples qu'on trouve partout.
Voilà mon "problème" :
Je veux créer un tableau dynamique avec "new". Ecrire dans le tableau. Et enfin, libérer la mémoire que j'ai alloué à mon tableau. Rien de compliqué... la base la plus simple qu'il soit. Mais je suis tellement nulle que je me fais engueuler lors de l'exécution du programme.
Je vous met mon code :
Je sais pas ce qu'il y a comme erreurs... mais quand j'exécute mon prog, il fait tout sans problème mais je suppose qu'il foire au moment de la libération de la mémoire et dit :
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 1 #include <iostream> 2 #include <fstream> 3 4 using namespace std; 5 6 int main() 7 { 8 ifstream DATA; 9 DATA.open("picsoleil.dat"); 10 if (!DATA) 11 { 12 cout<<"Error opening DATA file"<<endl; 13 return 1; 14 } 15 16 16 int n, cpt; 17 double x, y; 18 19 DATA>>n; 20 21 double *tabfreq = new double[n]; 22 if (tabfreq == NULL) return 1; 23 double *tabampl = new double[n]; 24 if (tabampl == NULL) return 1; 25 26 cpt = 0; do{ 27 DATA>>x>>y; 28 tabfreq[cpt] = x; 29 tabampl[cpt] = y; 30 cpt++; 31 }while(DATA.eof()==0); 32 33 cout<<"hfurehf"<<endl; 34 35 // params : tableau des freq, tableau des amplitudes, nombre de points 36 37 struct data 38 { 39 double *freq, *ampl; 40 int npts; 41 }; 42 43 data *params; 44 45 params->freq = tabfreq; 46 params->ampl = tabampl; 47 params->npts = n; 48 49 50 for(int i = 0; i<n; i++) 51 { 52 cout<<"tabfreq["<<i<<"] = "<<tabfreq[i] 53 <<"\ttabampl["<<i<<"] = "<<tabampl[i]<<endl; 54 } 55 56 delete [] tabfreq; 57 delete [] tabampl; 58 59 DATA.close(); 60 }
*** glibc detected *** essai_asupp: double free or corruption (!prev): 0x09abf178 ***
======= Backtrace: =========
/lib/libc.so.6[0x4752aa68]
/lib/libc.so.6(__libc_free+0x78)[0x4752df6f]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x478ef6c1]
etc...
Partager