Boa Noite Pessoal... 
  
Venho recorrer a ajuda de voces pois estou tentando resolver esse problema e não sei exatamente o que ocorre. 
E o seguinte, estou criando um programa que ao iniciar ele verifica se tem um arquivo, caso não haja ele passa direto, crio minha lista e ao final ele salva a lista num arquivo binario, ate ai tudo bem, mais ao abrir novamente o programa ele da erro e fecha antes mesmo de mecher nele, O que eu acredito ser na hora da leitura do arquivo esse tal erro. O programa esta em C. 
int main() {
	
	
	FILE *file;
	
	//Criar Primeiro elemento da lista (Cabeça)
    tProd *inicio = (tProd*) malloc(sizeof(tProd));
    inicio->cod = 0;
    inicio->prox = NULL;
	
	//abre o arquivo para leitura em modo binário 
	file = fopen("Produtos", "rb"); 
	
	
	if (file != NULL){
		
		//Ponteiro de armazenamento temporario
		tProd *temp2 = (tProd*) malloc(sizeof(tProd));
		temp2 = inicio->prox;
		
		
		//Enquanto nao chegar fim de arquivo
		//Copia de 1 em 1 encadeando
		while( feof(file) == 0 ) {
			
			//Ponteiro de armazenamento novo
			tProd *temp1 = (tProd*) malloc(sizeof(tProd));
			temp1->prox = NULL;
			
			//Le a estrutura e armazena no temp1
			fread(&temp1, sizeof(tProd), 1, file);
		
		
		
			//Procura o ultimo elemento para adicionar o proximo
			if(inicio->prox == NULL){
			
				inicio->prox = temp1;
				//inicio->cod = temp1->cod + 1
			
			} else {
			
				while (temp2->prox != NULL){
					temp2 = temp2->prox;
				}
			
				temp2->prox = temp1;
				//inicio->cod = temp1->cod + 1
			}
		
				
			
		}
		
		
		
	} else {
		printf("\n-- O Arquivo Nao foi Aberto ou Nao Existe,\n-- Apos Cadastrar Todos Produtos Sera Salvo Um Novo Arquivo\n\n");
	}
	
	fclose(file);
	
e aqui esta a função que salva e struct que estou utilizando 
typedef struct pProd {
    
    int cod;        //Codigo do produto
    char nome[30];  //Nome
    float preco;	//Preço do produto
    int quanti;		//Quantidade
    struct pProd *prox; //Ponteiro para o proximo elemento
    
} tProd;
void salvar(FILE *file, int num, tProd *inicio){
	int i;
	tProd *temp = inicio->prox;
	
	while(temp != NULL){
		
		fwrite(&temp, sizeof(tProd), 1, file);
		temp = temp->prox;
		
	}
	
	
}
Espero que voces possam me salvar.