J'essaye d'allouer une grande matrice 4D mais je veux le faire dynamiquement. Quand je crée simplement la matrice statique, tout fonctionne bien, donc je sais que j'ai suffisamment de mémoire pour l'instant. Cependant, quand j'essaie de mettre en œuvre dynamiquement la même chose, ça casse chaque fois que j'entre dans la troisième dimension et je dois en arriver à une quatrième! Quelqu'un peut-il me dire pourquoi ce code ne fonctionne pas?Pourquoi ai-je une erreur de segmentation (core dumped) lorsque j'essaie d'allouer une matrice 4D?
#include <iostream>
using namespace std;
static const int time1 = 7;
static const int tlat = 15;
static const int tlon = 17;
static const int outlev = 3;
int main(void)
{
//allocate four dimensional dataIn
int ****dataIn;
dataIn = new int ***[time1];
if (dataIn == NULL) { return 1; }
for(int i = 0 ; i < time1 ; i++) {
dataIn[i] = new int **[tlat];
if (dataIn[i] == NULL) { return 1; }
for(int j = 0 ; j < tlat ; j++) {
dataIn[i][j] = new int *[tlon];
if (dataIn[i][j] == NULL) { return 1; }
for(int k = 0 ; k < tlon ; k++) {
dataIn[i][j][k] = new int[outlev];
if (dataIn[i][j][k] == NULL) { return 1; }
}
}
}
//there is more code that happens here to add values to dataIn
//and eventually output it but I know all of that works
return 0;
}
J'ai essayé beaucoup de différentes variations sur ce code, et même utilisé malloc au lieu de nouveau, mais je ne peux pas le faire fonctionner. Toute aide est la bienvenue.
Ne plante pas ici. Peut-être que le bloc de code * réel * va vous aider. – dirkgently
J'ai compilé le code que vous avez publié et il s'est exécuté sans se bloquer dans VS2005. Veuillez être plus précis quant à votre problème. –
Dans un commentaire ci-dessous, vous indiquez que l'erreur est sur la ligne: 'dataIn [i] [j] ='. Quelles sont les valeurs de i et j. Quelle est la valeur du pointeur retourné, etc Si vous n'avez pas de debuger (difficile à grok) alors vous pouvez le faire à l'ancienne en mettant des instructions d'impression qui montrent l'état. –