L'appel de memset provoque des erreur de segmentation

Ce programme provoque une seg fault sur ma machine UNIX. J'ai réduit la cause jusqu'à la deuxième appel de memset().

Pourquoi ce comportement est-il survenu? Le premier "morceau" de code est presque le même que le second, n'est-ce pas? Pourquoi ne pas l' première appel de memset erreur de segmentation si le second n'?

J'ai regardé sur d'autres threads concernant segfaulting memset des appels, mais aucun d'entre eux étaient similaires à ce.

Dans le cas où vous vous demandez pourquoi j'ai écrit un tel trivial programme, il est adapté à partir d'un autre programme que j'ai écrit que j'utilisais pour m'enseigner comment appliquer memcpy() pour les structures.

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

typedef struct{
    int x;
    char text;
} FilesStruct;

int
main(int argc, char** argv)
{
    FilesStruct *old_dir;
    memset(old_dir,0,sizeof(FilesStruct));
    old_dir->x = 3;
    old_dir->text = 'c';
    printf("old dir: %d,%c\n",old_dir->x,old_dir->text);

    FilesStruct *new_dir;
    memset(new_dir,0,sizeof(FilesStruct));
    new_dir->x = 7;
    new_dir->text = 'g';
    printf("new dir: %d,%c\n",new_dir->x,new_dir->text);

    return 0;
}

OriginalL'auteur python_newbie | 2013-05-28