Bonjour,
après quelques années sans coder, je revoilà dans le domaine et j'ai les neurones qui s'échauffent.
Je dois coder pour le boulot un petit bout de code qui génère une table semi aléatoire de dimension X*Y et pour cela j'alloue de la mémoire, je passe tout ce qui va bien en paramètre d'une fonction (un pointeur sur la table et les paramètres X et Y). La dite fonction génère aléa et le stocke dans le tableau passé en argument.
Ensuite dans ma boucle main, je réitère sur mon tableau pour afficher les valeurs générées et la boum !! Erreur de violation d'accès en lecture.
J'ai épuré mon code au max pour ramener au strict minium pour voir d'où vient le PB, je trace au débuggeur et ça semble marcher, mais nada, ca plante systématiquement sur le "cout" d'affichage.
Je suis certain d'avoir écrit un mauvais code et de faire une confusion au niveau du pointeur sur le tableau, mais je trouve pas la solution.
Je sèche sur le sujet. si vous avez une idée. Pour info je code sous Visual Studio Community 2017.
Voici mon code qui bugge.
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 #include <iostream> using namespace std; void initPerlinNoiseTable(float *tableToFill, int height, int width) { int random; float random11; for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { random = rand(); random11 = (float)(float(random) / float(RAND_MAX)); random11 = (float)(2.0f*(float(random11) - 0.5f)); //cout << float(random11) << " "; int shiftmemory = (j*width + i) * sizeof(float); *( tableToFill + shiftmemory ) = random11; } cout << endl; } } int main() { float *arrayPerlinNoise=NULL; int arrayHeight = 2; int arrayWidth = 2; arrayPerlinNoise = (float*) malloc(arrayHeight*arrayWidth*sizeof(float)); initPerlinNoiseTable(arrayPerlinNoise, arrayHeight, arrayWidth); for (int j = 0; j < arrayHeight; j++) { for (int i = 0; i < arrayWidth; i++) { int shiftmemory = (j*arrayWidth + i) * sizeof(float); float value = *(arrayPerlinNoise+ shiftmemory); cout << value << " "; } cout << endl; } free(arrayPerlinNoise); system("pause"); return 0; }
Merci bcp,
Sly
Partager