C: ajout d'élément de tableau alloué dynamiquement

J'ai essayé de trouver une solution via Google: je ne pouvais pas trouver quelque chose qui a aidé; il paraît même que si je faisais cela correctement. Les seules pages que j'ai pu trouver concernant l'envoi de mon tableau alloué dynamiquement via une fonction traitées avec la matrice à l'intérieur d'une structure, qui est scalaire, donc se comporte différemment. Je ne veux pas utiliser une structure en ce moment, je suis en train d'apprendre à propos de BARRAGE et de travailler avec des pointeurs et des fonctions.

Cela dit, je suis sûr que c'est très primaire, mais je suis coincé. Le code compile, mais il se fige quand je lance l'exécutable. (Je suis en utilisant minGW gcc, si ce qui compte. Et je ne suis pas clair du tout, dès maintenant, sur la façon d'utiliser gdb.)

Voici le code (finalement, je veux que l'ensemble du code à une liste de tableaux-comme structure de données):

#include <stdio.h>
#include <stdlib.h>

void add( int element, int *vector);
void display_vector( int *vector );
void initialize_vector( int *vector );

int elements = 0;
int size = 10;

int main(void)
{
    int *vector = 0; 
    initialize_vector(vector);
    add(1, vector);
    //add(2, vector);
    //add(3, vector);
    //add(4, vector);
    //add(5, vector);
    //add(6, vector);
    //add(7, vector);
    //add(8, vector);
    //add(9, vector);
    //add(10, vector);
    //add(11, vector);
    display_vector(vector); 

    return 0;
}

void add( int element, int *vector)
{
    vector[elements++] = element;
    return;
}

void display_vector( int *vector )
{
    int i;
    for( i = 0; i < elements; i++)
    {
        printf("%2d\t", vector[i]);
        if( (i + 1) % 5 == 0 )
            printf("\n");
    }
    printf("\n");
    return; 
}

void initialize_vector( int *vector )
{
    vector = (int *)malloc(sizeof(int) * size);

}
  • Pourquoi avez-vous elements et size comme des variables globales, mais vector est une variable locale? Puisque vous ne pouvez pas avoir plus d'un vecteur à cause de la global elements variable, vous pourriez aussi bien faire vector une variable globale ainsi.
  • Vous affectez l'adresse de la mémoire nouvellement allouée pour le pointeur. L'original pointeur est toujours un NULLPTR.
  • Très bon point @Barmar.
  • ne dois-je pas faire l'original pointeur null alors? Il s'exécute de la façon dont il est mis en place maintenant avec dboals modifications de code.
InformationsquelleAutor BWONG | 2014-05-02