이 코드가 세분화 오류를 반환하는 이유를 파악하려고합니다. Gdb는 내게 오류 strcpy(newNode -> data -> ticket_name, name);
을주는 줄을 말합니다. 기능은 strcat()
입니다. 어떤 아이디어? 나는 또한 C.링크 된 목록에 새 노드를 추가하려고하면 분할 오류가 발생하는 이유는 무엇입니까?
newNode
을위한 공간을 할당
void add_ticket(tm_type * tm)
{
char name[TICKET_NAME_LEN+1], type, zone[TICKET_ZONE_LEN], buffer[5], *ptr, *pos;
int price;
BOOLEAN check = TRUE;
printf("Add Ticket\n");
printf("----------\n");
printf("\n");
printf("Ticket name (1-40 characters): ");
if(fgets(name, sizeof(name), stdin) != NULL){
if(name[0] != '\n'){
if((pos=strchr(name, '\n')) != NULL){
*pos = '\0';
}
printf("\nTicket type (1 character): ");
type = fgetc(stdin);
if(type != '\n'){
read_rest_of_line();
printf("\nTicket zone (1-3 characters): ");
if(fgets(zone, sizeof(zone), stdin) != NULL){
if(zone[0] != '\n'){
if((pos=strchr(zone, '\n')) != NULL){
*pos = '\0';
}
printf("\n\n");
printf("Price (in cents): ");
if(fgets(buffer, sizeof(buffer), stdin) != NULL){
price = strtol(buffer, &ptr, 10);
if(buffer[0] != '\n'){
//create new node
stock_node *newNode = (stock_node*)malloc(sizeof(stock_node));
if(newNode == NULL){
fprintf(stderr, "Unable to allocate memory for new ticket.\n");
exit(EXIT_FAILURE);
}
strcpy(newNode -> data -> ticket_name, name);
newNode -> data -> ticket_type = type;
strcpy(newNode -> data -> ticket_zone, zone);
newNode -> data -> ticket_price = price;
newNode -> data -> stock_level = DEFAULT_STOCK_LEVEL;
newNode -> next_node = NULL;
//check for first insertion
if(tm -> stock -> head_stock -> next_node == NULL){
tm -> stock -> head_stock -> next_node = newNode;
printf("First ticket added.\n");
}
else{
//else loop through the list and find the last
//node, insert next to it
stock_node *stream = tm -> stock -> head_stock;
while(check == TRUE){
if(stream -> next_node == NULL){
stream -> next_node = newNode;
printf("Ticket added.\n");
check = FALSE;
}
stream = stream -> next_node;
}
}
}
}
}
}
}
}
}
}
이의 선언을 추가 할 생각' –
는 회원 ticket_name'은'newNode-> 데이터 -> 당신의 malloc나요 stock_node'? – Leonardo
이유 # 목록 관리 코드를 UI 상호 작용과 통합하지 않는 이유가 없습니다. 코드가 스파게티가됩니다. 이 문제는 데이터 판독기와 목록 삽입이 별개의 기능이라면 상당히 쉽게 발견 될 수 있습니다. ** ** 디버그 방법을 배웁니다. 디버깅 환경에서이 작업을 실행하면 오류가 발생한 정확한 위치 *에 대한 즉각적인 대응이 보장됩니다. – WhozCraig