-2

嗨,我尝试在 VS 2010 上运行此代码,但我崩溃了,它告诉我:

这可能是由于堆损坏,这表明 TEST_5.exe 或其已加载的任何 DLL 中存在错误。

这也可能是由于用户在 TEST_5.exe 获得焦点时按 F12。

输出窗口可能有更多诊断信息。程序“[4620] TEST_5.exe: Native”已退出,代码为 0 (0x0)。

我在 borland c 编译器上也有同样的崩溃,但在 dev cpp 中它的工作。所以这是我的代码请帮助

#include <stdio.h>
#include <stdlib.h>
struct node{
    int ID;
    int active;
    int loop_time;
    float c;
    int a;
    struct node *prev,*next;
};
struct node *new_node(struct node *p)
{
    struct node *temp,*prev;
    if(p==NULL)
    {
        p=(struct node*)malloc(sizeof(struct node*));
        p->prev=NULL;
        p->next=NULL;
        return p;
    }
    if(p!=NULL)
    {
        temp=p;
        while(temp!=NULL)
        {
            prev=temp;
            temp=temp->next;
        }
        temp=(struct node*)malloc(sizeof(struct node*));
        temp->prev=prev;
        temp->next=NULL;
        prev->next=temp;
        return temp;
    }
    return 0;
}
void main()
{
    struct node *force1=NULL;
    //=============================
    force1=new_node(force1);
    force1->ID=11;
    force1->active=11;
    force1->loop_time=0;
    //==============================
    force1=new_node(force1);
    force1->ID=11;
    force1->active=11;
    force1->loop_time=0;
    //==============================
    printf("END\n");
system("pause");
}
4

1 回答 1

4
    p=(struct node*)malloc(sizeof(struct node*));

    temp=(struct node*)malloc(sizeof(struct node*));

应该

p=malloc(sizeof(struct node));
temp=malloc(sizeof(struct node));

甚至更好

p=malloc(sizeof *p);
temp=malloc(sizeof *temp);

您只是为指针分配了足够的空间,而不是为整个结构分配了足够的空间。

请注意,第一个 return fromnew_node()是泄漏的;new_node()在第二个电话返回后,没有办法到达它。

于 2013-10-27T20:32:53.993 回答