Tableau dynamique 2 dimensions (norme C99)
Bonjour,
Je cherche a créer un tableau dynamique à dimensions.
Jusqu'a present j'utilisais la methode :
Code:
1 2 3 4
| int **tab = malloc(sizeof(*tab) * 20);
for (i = 0; i < 20; i++)
tab[i] = malloc(sizeof(**tab) * 50); |
Mais mon prof me disait qu'il y avait une autre méthode.. comme un gros imbécile j'ai laissé le fichier sur l'ordi de l'ecole et je ne peux pas le recup..
brefs.. me voila a la recherche de l'autre methode sur le net, et je tombe sur ceci :
Code:
1 2 3 4
| typedef char (*type_t)[taille2];
type_t tab_ptr = (type_t)malloc(taille*taille2);
char tab_ptr[taille][taille2]; |
source
avec un exemple plus bas :
Code:
1 2 3 4 5 6 7 8 9 10 11
| #include <stdio.h>
#include <stdlib.h>
int main(void) {
int taille, taille2;
scanf("%d", &taille);
scanf("%d", &taille2);
char (*montab)[taille2] = malloc(taille*taille2*sizeof(char));
montab[2][5] = 12; //entrez une valeur correcte pour les scanf :)
return 0;
} |
Le souci c'est que quand je veux compiler ca, Visual Studio 2017 me dit que
Citation:
taille2 doit avoir une valeur de constante
Le code fonctionne bien quand je remplace taille2 par une constante.
Il est justement dis un peu plus bas dans le sujet de la source que c'est une erreur dans la norme en cours (le sujet date de 2003), mais que cela est accepté dans la (nouvelle) norme C99.
On est en 2017, j'utilise donc visual studio 2017, et apparemment cela n'est tjrs pas accepter??!
Comment puis je contourner ca?? Est ce que c'est possible de le contourner en utilisant cette méthode????
Je précise que je compile en C et pas en C++ et mon extension de fichier est .c et pas .cpp (via les options de vs2017)