Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这段代码会产生运行时错误? #包括 #包括 #包括 结构节点 { INTA; 结构节点*下一步; }; void createlist(结构节点**头) { 结构节点*p,*temp; int n; printf(“输入数字”); scanf(“%d”和“&n”); p=(结构节点*)malloc(sizeof(结构节点)); p->a=n; 如果(*头==0){ *水头=p; p->next=0; 温度=p; } 否则{ 温度->下一步=p; 温度=p; p->next=0; } } void frontbacksplit(结构节点**head,结构节点**head1,结构节点**head2) { int计数器=0,i; 结构节点*temp,*p; 温度=*水头; while(温度!=0){ 计数器++; 温度=温度->下一步; } int n; 如果(计数器%2==0){ n=计数器/2; }否则{ n=(计数器+1)/2; } 温度=*水头; 对于(i=0;不精确; } p=温度; 温度=温度->下一步; p->next=0; 对于(i=n+1;不精确; } } 无效显示(结构节点**头部) { 结构节点*temp; 温度=*水头; while(温度!=0){ printf(“%d\t”,temp->a); 温度=温度->下一步; } printf(“\n”); } int main() { int n=1,i,k; 结构节点*head3、*head1、*head2; 头3=0; 头1=0; 头2=0; 而(n==1){ printf(“输入\n1添加元素\n2将列表分为前面和后面\n3显示元素”); scanf(“%d”、&i); 开关(一) { 案例1: 创建列表(&head3); 打破 案例2: 前-后裂缝(头3、头1和头2); 打破 案例3: printf(“输入\n1显示前列表\n2显示后列表”); scanf(“%d”和“&k”); 开关(k) { 案例1: 显示器(&head1); 打破 案例2: 显示器(&head2); } 打破 违约: printf(“请输入有效选项\n”); } printf(“输入\n1以继续\n输入其他号码以退出”); scanf(“%d”和“&n”); } getch(); 返回0; }_C++_C - Fatal编程技术网

C++ 为什么这段代码会产生运行时错误? #包括 #包括 #包括 结构节点 { INTA; 结构节点*下一步; }; void createlist(结构节点**头) { 结构节点*p,*temp; int n; printf(“输入数字”); scanf(“%d”和“&n”); p=(结构节点*)malloc(sizeof(结构节点)); p->a=n; 如果(*头==0){ *水头=p; p->next=0; 温度=p; } 否则{ 温度->下一步=p; 温度=p; p->next=0; } } void frontbacksplit(结构节点**head,结构节点**head1,结构节点**head2) { int计数器=0,i; 结构节点*temp,*p; 温度=*水头; while(温度!=0){ 计数器++; 温度=温度->下一步; } int n; 如果(计数器%2==0){ n=计数器/2; }否则{ n=(计数器+1)/2; } 温度=*水头; 对于(i=0;不精确; } p=温度; 温度=温度->下一步; p->next=0; 对于(i=n+1;不精确; } } 无效显示(结构节点**头部) { 结构节点*temp; 温度=*水头; while(温度!=0){ printf(“%d\t”,temp->a); 温度=温度->下一步; } printf(“\n”); } int main() { int n=1,i,k; 结构节点*head3、*head1、*head2; 头3=0; 头1=0; 头2=0; 而(n==1){ printf(“输入\n1添加元素\n2将列表分为前面和后面\n3显示元素”); scanf(“%d”、&i); 开关(一) { 案例1: 创建列表(&head3); 打破 案例2: 前-后裂缝(头3、头1和头2); 打破 案例3: printf(“输入\n1显示前列表\n2显示后列表”); scanf(“%d”和“&k”); 开关(k) { 案例1: 显示器(&head1); 打破 案例2: 显示器(&head2); } 打破 违约: printf(“请输入有效选项\n”); } printf(“输入\n1以继续\n输入其他号码以退出”); scanf(“%d”和“&n”); } getch(); 返回0; }

C++ 为什么这段代码会产生运行时错误? #包括 #包括 #包括 结构节点 { INTA; 结构节点*下一步; }; void createlist(结构节点**头) { 结构节点*p,*temp; int n; printf(“输入数字”); scanf(“%d”和“&n”); p=(结构节点*)malloc(sizeof(结构节点)); p->a=n; 如果(*头==0){ *水头=p; p->next=0; 温度=p; } 否则{ 温度->下一步=p; 温度=p; p->next=0; } } void frontbacksplit(结构节点**head,结构节点**head1,结构节点**head2) { int计数器=0,i; 结构节点*temp,*p; 温度=*水头; while(温度!=0){ 计数器++; 温度=温度->下一步; } int n; 如果(计数器%2==0){ n=计数器/2; }否则{ n=(计数器+1)/2; } 温度=*水头; 对于(i=0;不精确; } p=温度; 温度=温度->下一步; p->next=0; 对于(i=n+1;不精确; } } 无效显示(结构节点**头部) { 结构节点*temp; 温度=*水头; while(温度!=0){ printf(“%d\t”,temp->a); 温度=温度->下一步; } printf(“\n”); } int main() { int n=1,i,k; 结构节点*head3、*head1、*head2; 头3=0; 头1=0; 头2=0; 而(n==1){ printf(“输入\n1添加元素\n2将列表分为前面和后面\n3显示元素”); scanf(“%d”、&i); 开关(一) { 案例1: 创建列表(&head3); 打破 案例2: 前-后裂缝(头3、头1和头2); 打破 案例3: printf(“输入\n1显示前列表\n2显示后列表”); scanf(“%d”和“&k”); 开关(k) { 案例1: 显示器(&head1); 打破 案例2: 显示器(&head2); } 打破 违约: printf(“请输入有效选项\n”); } printf(“输入\n1以继续\n输入其他号码以退出”); scanf(“%d”和“&n”); } getch(); 返回0; },c++,c,C++,C,我已经为链表的前/后拆分编写了此代码。例如,如果列表为[1 2 3 4 5],则此程序将列表拆分为两个列表:前半部分(1 2 3)和后半部分(4 5),如果元素数相等,则两个部分的元素数相等 问题:当我尝试在源列表中添加元素时,第一个元素会像往常一样添加,但当我尝试添加其他元素时,我的程序显示运行时错误。我认为指针变量temp有问题,但创建链接列表的代码几乎相同,但工作正常 我在Windows 8上使用DEVC++ C++ ID. < /P> 当然,如果您不喜欢这个问题的提问方式,请指出,因为这

我已经为链表的前/后拆分编写了此代码。例如,如果列表为[1 2 3 4 5],则此程序将列表拆分为两个列表:前半部分(1 2 3)和后半部分(4 5),如果元素数相等,则两个部分的元素数相等

问题:当我尝试在源列表中添加元素时,第一个元素会像往常一样添加,但当我尝试添加其他元素时,我的程序显示运行时错误。我认为指针变量temp有问题,但创建链接列表的代码几乎相同,但工作正常

我在Windows 8上使用DEVC++ C++ ID. < /P>
当然,如果您不喜欢这个问题的提问方式,请指出,因为这是我的第一次。

首先查看
createlist
函数中的这一行
temp->next=p
是错误的,
temp
是一个局部变量,尽管您在第一次创建列表时将其指向元素,但值丢失了呃,
createlist
函数返回,因此您将在连续调用
createlist

createlist()中的指针变量“temp”时访问垃圾地址函数在第一次调用后的调用中未进行赋值。如果使用GCC,则可以使用-Wall选项。也许您应该更改为:

#include<stdio.h>
#include<conio.h>
#include<windows.h>
struct node
{
    int a;
    struct node *next;
};

void createlist(struct node **head)
{
    struct node *p,*temp;
    int n;
    printf("enter the number\n");
    scanf("%d",&n);
    p=(struct node*)malloc(sizeof(struct node));
    p->a=n;
    if(*head==0) {
        *head=p;
        p->next=0;
        temp=p;
    }
    else {
        temp->next=p;
        temp=p;
        p->next=0;
    }
}

void frontbacksplit(struct node **head,struct node **head1,struct node **head2)
{
    int counter=0,i;
    struct node *temp,*p;
    temp=*head;
    while(temp!=0) {
        counter++;
        temp=temp->next;
    }   
    int n;
    if(counter%2==0) {
        n=counter/2;
    } else {
        n=(counter+1)/2;
    }
    temp=*head;
    for(i=0;i<n-1;i++) {
        if(*head1==0) {
            *head1=temp;
        }
        temp=temp->next;
    }
    p=temp;
    temp=temp->next;
    p->next=0;
    for(i=n+1;i<counter;i++) {
        if(*head2==0) {
            *head2=temp;
        }
        temp=temp->next;
    }
}

void display(struct node **head)
{
    struct node *temp;
    temp=*head;
    while(temp!=0) {
        printf("%d\t",temp->a);
        temp=temp->next;
    }   
    printf("\n");
}

int main()
{
    int n=1,i,k;
    struct node *head3,*head1,*head2;
    head3=0;
    head1=0;
    head2=0;
    while(n==1) {
        printf("enter \n1-To add the elements\n2-To split the list into front and        the back\n3-To display the elements\n");
        scanf("%d",&i);
        switch(i)
        {
            case 1:
                createlist(&head3);
                break;
            case 2:
                frontbacksplit(&head3,&head1,&head2);
                break;
            case 3:
                printf("enter\n1-To display front list\n2-To display rear list\n");
                scanf("%d",&k);
                switch(k)
                {
                    case 1:
                        display(&head1);
                        break;
                    case 2:
                        display(&head2);
                }
                break;
                default:
                printf("please enter a valid option\n");
        }
        printf("enter\n1-To continue\nany other number to exit\n");
        scanf("%d",&n);
    }
    getch();
    return 0;
}

欢迎使用SO。请使用一个合适的标题来回答您的问题,以便人们一眼就能看出这是怎么回事。一般来说,您可以通过查看本网站的帮助文本来了解如何在此处提问。我想您遇到了seg错误。我认为错误是由于指针泄漏,但无法确定正确的解释。但我编译了几乎相同类型的代码,用于创建带有指针temp的链表,它工作正常。它可以编译,因为在运行时(执行./your_exe)访问您想要的任何地址不是编译错误。如果您访问非法地址,程序将被操作系统终止(通常)…正如@Nabarun所建议的,在运行exectable之前,请查看编译器抛出的警告。您的意思是以前的程序意外运行。我想以前您只创建了一个列表…您打印了吗???我试图编译您的程序,但编译器发出的警告如下:
del.c:22:19:警告:我可能会使用“temp”在此函数中初始化[-Wuninitialized]
你向列表中添加元素是有效的,因为当你只添加元素时,你不会检查列表是否指向它应该指向的位置:所以我的建议是:向列表中添加2个元素,并尝试打印它们,然后继续进行拆分…另一方面…我认为你应该读一本关于C的书…因为显然你缺乏理解我推荐K&R C
void createlist(struct node **head)
{
    struct node *p,*temp;
    int n;
    printf("enter the number\n");
    while(scanf("%d",&n) != EOF)
    {
        p=(struct node*)malloc(sizeof(struct node));
        p->a=n;
        if(*head==0)
        {
            *head=p;
            p->next=0;
            temp=p;
        }
        else
        {
            temp->next=p;
            temp=p;
            p->next=0;
        }
    }
}