在winTC下可以运行,但是在VC下就报内存错误,为什么?
#include<stdio.h>#include<malloc.h>typedefstructNode{structNode*prior;intdata;structN...
#include<stdio.h>
#include<malloc.h>
typedef struct Node
{
struct Node *prior;
int data;
struct Node *next;
}DLinkList;
DLinkList *head;
int InitDList(DLinkList *DL)
{
DL=(DLinkList *)malloc(sizeof(DLinkList));
if(DL!=NULL)
{
printf("success!\n");
DL->next=NULL;
DL->prior=NULL;
return(1);
}
else
return(0);
}
int DLInsert(DLinkList *DL)
{
DLinkList *temp,*node;
temp=DL;
while(temp->next!=NULL)
{temp=temp->next;}
node=(DLinkList *)malloc(sizeof(DLinkList));
if(node==NULL)
return 0;
node->data=6;
node->prior=temp;
node->next=NULL;
temp->next=node;
return 1;
}
main()
{
InitDList(head);
DLInsert(head);
} 展开
#include<malloc.h>
typedef struct Node
{
struct Node *prior;
int data;
struct Node *next;
}DLinkList;
DLinkList *head;
int InitDList(DLinkList *DL)
{
DL=(DLinkList *)malloc(sizeof(DLinkList));
if(DL!=NULL)
{
printf("success!\n");
DL->next=NULL;
DL->prior=NULL;
return(1);
}
else
return(0);
}
int DLInsert(DLinkList *DL)
{
DLinkList *temp,*node;
temp=DL;
while(temp->next!=NULL)
{temp=temp->next;}
node=(DLinkList *)malloc(sizeof(DLinkList));
if(node==NULL)
return 0;
node->data=6;
node->prior=temp;
node->next=NULL;
temp->next=node;
return 1;
}
main()
{
InitDList(head);
DLInsert(head);
} 展开
1个回答
展开全部
楼主,你这个错误,比较典型了
你的InitDList(DLinkList *DL)函数中,开辟了堆空间,并传给了指针DL,但是这个DL并不是和你传进来的那个实参是一个,而是,实参的一个副本
这个就好像这个在被调函数中交换两个数一样,如果传参,是不能改变的
void Swap(int a, int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
int a = 4;
int b = 3;
Swap(a, b); //这个函数调用之后不会交换a, b,因为穿进去的只是实参的拷贝,所以用指针解决
但是在你的这个程序中,你想改变的是指针的值,而不是改变指针指向的值,所以,你必须用二级指针或者返回值为指针来解决
例如下面这样
DLinkList *InitDList()
{
DLinkList *DL=(DLinkList *)malloc(sizeof(DLinkList));
return DL;
}
int main()
{
head = InitDList();
//在主函数判断是否开辟成功
if(head == NULL)
{
//
}
}
追问
二级指针?怎么用?
追答
int a;
int *p = &a;
int **lp = &p;
lp就是二级指针,就是指向指针的指针,这样才可以修改指针的内容
指针修改的是指针指向的内容
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询