Ce programme est destiné à générer un tableau dynamique, mais il donne une erreur de violation d'accès lors de l'écriture lorsque certaines dimensions sont données. Par exemple: R = 6, C = 5 accidents, mais alors R = 5, C = 6 non. Dans le cas où vous vous demandez, ce n'est pas mon devoir de "réparer" ce programme brisé, c'est la méthode qu'on nous a enseignée en classe. Une partie de mon évaluation consiste à utiliser cette méthode, donc les vecteurs sont sortis. Merci d'avance!Violation d'accès lors de l'écriture de tableau 2D dynamique ... Parfois
#include <iostream>
using namespace std;
int main(){
const int R = 6;
const int C = 5;
char **d;
d = new char *[R];
for(int i=0; i<C; ++i){
d[i] = new char[C];
}
//initialise
for(int i=0; i<R; ++i){
for(int j=0; j<C; ++j){
d[i][j] = 'd';
cout<<d[i][j];
}
cout<<endl;
}
cout<<endl;
system("pause");
return 0;
}
Même si l'écriture 'd [r] [c]' pourrait sembler gentil, tout ces nouveaux appels pourraient devenir fastidieux pour des valeurs beaucoup plus grandes de R. Je donnerais donc 'char * d = new char [C * R]; pour (...) d [r * C + c] = 'd'; 'une pensée sérieuse. Il est possible d'arrondir 'C' à la prochaine puissance de 2, si la machine cible a des multiplications vraiment lentes. – ndim
Même si vous pouvez y accéder avec la notation 'd [] []', cette structure n'est * pas * un tableau 2d. Quand vous écrivez 'char e [R] [C];' vous obtenez * un * bloc de mémoire totalisant 'R * C * sizeof (char)'. Avec la structure que vous utilisez (parfois appelée "tableau ragged") vous obtenez une allocation de 'R * sizeof (char *)' plus les allocations 'R' de' C * sizeof (char) '(qui peut ou non être contigu (ou même distinct!)) et il n'est pas nécessaire que chaque rangée ait la même longueur. Différentes choses. – dmckee
Merci pour le conseil, @ndim, yer J'ai essayé de cette façon en premier mais je n'ai pas compris l'accès, pour le moment cela devrait être correct car R et C ne dépasseront pas 10. @dmckee, merci de clarifier, un peu au-dessus de ma tête, mais je suis sûr que cela aura du sens à temps. – fauxCoder