Hola:
El problema es que cuando declaras un puntero hay que reservar memoria: en c++ con new(), en c, como es el caso, con malloc.
El programa realmente peta en la asignación e->a = 10; al no estar reservada la memoria. ya que lo declarado como e es un puntero y no es el contenedor.
Si justo después de la declaración del pointer a la estructura le pones la reserva de memoria:
e=malloc(sizeof(Estructura));
ya tira.
el programa retocado queda:
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int a;
}
Estructura;
void imprimir(Estructura);
int main ()
{
Estructura *e = NULL;
e=malloc(sizeof(Estructura));
e->a = 10;
imprimir(*e);
return 0;
}
void imprimir(Estructura e)
{
printf("%d\n\n", e.a);
}
edito el mensaje para indicar que el programilla, a pesar de ser corto, tiene un grave problema: no se libera la memoria reservada. faltaría al final hacer el delete de puntero.
salu2