2009-09-04 9 views
0

J'ai une fonction qui renvoie un tableau de différentes longueurs basé sur une recherche de table. Je mets en mémoire la mémoire nécessaire à l'intérieur de la fonction, mais comment puis-je remplir le tableau à partir de son pointeur? Le compilateur lance la même erreur pour mes deux essais (lignes commentées). S'il vous plaît aider!Comment initialiser un tableau après l'allocation de mémoire dynamique?

int lookup(const char *name, float *factors) { 
    int length; 
    if(!strcmp(name, "foo")) { 
     length = 6; 
     factors = malloc(length * sizeof(float)); 
     // *factors = {0, -0.9, -4.9, -8, -7.8, -23.9}; 
     // factors = {0, -0.9, -4.9, -8, -7.8, -23.9}; 
    } 
    else if(!strcmp(name, "bar")) 
    { 
     length = 4; 
     factors = malloc(length * sizeof(float)); 
     // *factors = {0, -3, -6, -9}; 
    } 
    // ....................... 
    // more else if branches 
    // ....................... 
    else // error: name not found in table 
    { 
     factors = NULL; 
     fprintf(stderr, "name not found in table!!\n"); 
     return 0; 
    } 
    return length; 
} 

Répondre

0
static const float[] initials = { .... }; 
factors = malloc(sizeof(initials)); 
memmove(factors,initials,sizeof(initials)); 
+0

J'avais cette idée en tête, mais n'y a-t-il pas une manière plus élégante? – Aamir

+0

Eh bien, c'est assez élégant. Une autre solution serait de ne pas allouer de mémoire, mais d'assigner juste 'factors = initiales', mais, bien sûr, si vous allez modifier les facteurs par la suite, cela ne fonctionnera pas. –

0

un moment que je C codé droite, Pardonne donc des erreurs mineures, mais essayez

const float[] initialValue = {0, -0.9, -4.9, -8, -7.8, -23.9}; 
for (int i=0; i<length; i++) 
{ 
    factors[i] = initialValue[i]; 
} 

Le problème fondamental est que vous essayez d'utiliser la syntaxe pour initialiser des constantes pour initialiser une dynamique variable.

+0

Désolé, mais cela ne fonctionnerait pas. J'ai différents vecteurs à retourner pour chaque recherche. – Aamir

+0

Ce code est destiné à remplacer la ligne ** // facteurs = {0, -0,9, -4,9, -8, -7,8, -23,9}; **. Vous avez encore besoin de malloc la mémoire. Je suis content que vous ayez trouvé une solution qui fonctionne pour vous. –

+0

En fait, la "solution de travail" (je suppose que vous vous référez à la mienne) utilise la même technique - copier des données à partir d'un tableau statique, juste un peu plus vite. Et pour les deux solutions, il faudrait définir un tableau statique par vecteur. –

1

Utiliser la notation de tableau - facteurs [index].

Questions connexes