Getting a SIGSEGV

Can u please correct it for me?

#include<stdio.h>
#include<stdlib.h>
typedef struct N
{
int info;
struct N *next;
}cnode;
cnode * create( cnode *);
void traverse(cnode *);
/*void InsertAtBeg(cnode *);
void InsertAtEnd(cnode *);
void DeleteAtBeg(cnode *);
void DeleteAtEnd(cnode *); /
int main()
{
cnode start = NULL;
start = create(start);
int opt;
while(1)
{
printf(“Operations:\n1. Traverse\n2. Insert at beg\n3. Insert at end\n4. Delete at beg\n5. Delete at end\n6. Exit\n”);
scanf("%d",&opt);
switch(opt)
{
case 1: traverse(start); break;
/
case 2: InsertAtBeg(start); break;
case 3: InsertAtEnd(start); break;
case 4: DeleteAtBeg(start); break;
case 5: DeleteAtEnd(start); break;
/
case 6: printf(“Program terminated!\n”); exit(0);
}
}
return 0;
}
cnode * create(cnode * start)
{
cnode *temp;
if(start = NULL)
{
start = (cnode *)malloc(sizeof(cnode));
printf(“Input data to 1st node= “);
scanf(”%d”,&(start -> info));
start -> next = NULL;
}
temp = start;
int i;
for(i = 0 ; i < 5 ; i++)
{
temp -> next = (cnode *)malloc(sizeof(cnode));
temp = temp -> next;
printf(“Enter data= “);
scanf(”%d”,&(temp -> info));
temp = temp -> next;
}
temp -> next = NULL;
return start;
}
void traverse(cnode *start)
{
cnode *temp;
temp = start;
printf(“Element in the list:\n”);
while(temp != NULL)
{
printf("%d\t",temp -> info);
temp = temp -> next;
}
printf("\n");
}

Please provide a link to the problem and also to your solution.