尝试将新节点添加到链接列表时,为什么会出现细分错误?

An0nx

只是想弄清楚为什么这段代码返回分段错误。Gdb说的那行给了我strcpy(newNode -> data -> ticket_name, name);功能上说的错误strcat()有任何想法吗?我还要指出,我是C语言的新手。

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;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
萨史密斯

您为分配了空间newNode,但从未进行任何初始化。因为newNode -> data其中包含垃圾,所以当您使用第二个箭头取消引用它时,您会遇到段错误。我的c生锈了,但是我相信你想要

// create new node
stock_node *newNode = (stock_node*)malloc(sizeof(stock_node));

newNode -> data = (data_struct*)malloc(sizeof(data_struct));

...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试将依赖任务添加到C插件创建的任务时,为什么会出现错误?

尝试在Colfusion中使用JavaScript将src属性添加到img标签时,为什么会出现错误?

当我尝试使用Swing将Container对象添加到主JFrame对象时,为什么会出现此错误?

尝试将唯一索引添加到SQLite表时,为什么会出现“索引列不是唯一的”错误?

将Google Translate客户端库添加到Android项目时,为什么会出现此错误?

为什么即使在将 mysql 添加到设置后运行 django 项目时也会出现此错误?

为什么将连接字符串添加到代码后会出现错误?

尝试编写图形时为什么会出现细分错误?

尝试将元素添加到循环链接列表时出现java.lang.NullPointerException

尝试将列表连接到字符串时为什么会出现类型错误?

尝试使用继承将新对象添加到列表时出现 NullReferenceException

将节点添加到链表时出现分段错误

尝试将新的List对象添加到预定义的List对象时出现错误

尝试通过状态将类添加到列表项元素时出现解析错误

将节点添加到链接列表

将字典添加到字典列表时,为什么会出现“ Add的重载方法没有1个参数”的原因

为什么会出现细分错误?

为什么会出现细分错误?

如果将commons-lang jar添加到引用的库中,为什么会出现此错误

尝试将按钮添加到GridPane时为什么会收到错误消息?

为什么在将整数添加到浮点数时出现错误?

为什么在 Tkinter 中尝试将标签小部件添加到屏幕时出现“错误的窗口路径名”错误?

将新的后代节点添加到正在侦听的节点时,为什么触发Firebase Realtime Database onChildChanged?

为什么回形针上传会出现尝试链接错误?

FFMPEG:将字体添加到视频会出现错误

尝试显示列表时出现细分错误

将带有唯一指针的向量添加到头文件后,为什么会出现“尝试引用已删除的函数”错误?

尝试创建新的SQL Server数据库时为什么会出现连接错误?

尝试在Rails表单中添加占位符时,为什么会出现语法错误?