2013-05-06 2 views
-1

Comme ci-dessus, j'essaye de créer puis de remplir un tableau de structures avec quelques données de départ pour ensuite écrire/lire depuis. J'écris encore le simulateur de cache selon ma question précédente: Any way to get rid of the null character at the end of an istream get?Essayer de remplir un tableau 2d de structures en C++

Voici comment je fais le tableau:

struct cacheline 
{ 
string data; 
string tag; 
bool valid; 
bool dirty; 
}; 

cacheline **AllocateDynamicArray(int nRows, int nCols) 
{ 
cacheline **dynamicArray; 

dynamicArray = new cacheline*[nRows]; 
for(int i = 0 ; i < nRows ; i++) 
    dynamicArray[i] = new cacheline [nCols]; 

return dynamicArray; 
} 

J'appelle cela du principal:

cacheline **cache = AllocateDynamicArray(nooflines,noofways); 

il semble créer le tableau ok, mais lorsque je tente de le remplir je reçois des erreurs de mémoire, voici comment je suis en train de le faire:

int fillcache(cacheline **cache, int cachesize, int cachelinelength, int ways) 
{ 
for (int j = 0; j < ways; j++) 
{ 
for (int i = 0; i < cachesize/(cachelinelength*4); i++) 
{ 
    cache[i][ways].data = "EMPTY"; 
    cache[i][ways].tag = ""; 
    cache[i][ways].valid = 0; 
    cache[i][ways].dirty = 0; 

} 
} 
return(1); 
} 

Appeler avec:

fillcache(cache, cachesize, cachelinelength, noofways); 

Maintenant, ceci est la première fois que je l'ai vraiment essayé d'utiliser des tableaux dynamiques, il est donc tout à fait possible que je fais cela tout à fait tort, et encore moins en essayant de faire 2d, toutes les idées seraient grandement appréciées :)

De même, existe-t-il un moyen plus simple d'écrire/lire dans la matrice? En ce moment (je pense) je dois passer beaucoup de variables de et vers des fonctions, y compris le tableau (ou un pointeur vers le tableau?) Chaque fois qui ne semble pas efficace? Quelque chose d'autre dont je ne suis pas sûr, quand je passe le tableau (pointeur?) Et édite le tableau, quand je sors de la fonction, le tableau sera-t-il encore édité?

Merci

Edit: juste remarqué une erreur stupide monumentalement, il devrait être ofcourse:

cache[i][j].data = "EMPTY"; 
+1

Utiliser 'vECTOR' heureux –

+0

Je n'ai pas choisi d'utiliser des vecteurs pour deux raisons: je ne les ai jamais utilisé avant si WASN pas sûr d'eux, et la nature du programme (où vous choisissez la taille du cache que vous voulez) ne conviendrait pas aux vecteurs (à mon avis) – GeorgeStorm

+0

Ne devrait pas 'cache [i] [ways]' être 'cache [i] [j] '? – freitass

Répondre

0

Vous devriez trouver votre bonheur. Vous devez juste le temps de le vérifier (:.

The way to happiness

+0

La date limite est demain, donc je ne suis pas sûr d'avoir le temps d'apprendre quelque chose complètement maintenant: / – GeorgeStorm