使用malloc时sizeof(DLink)会报异常,sizeof(DNode)就不会(DLink是*DNode)

代码如下

#include<iostream>
#include<stdio.h>
#include <malloc.h>
#include <stdlib.h>
using namespace std;
//sizeof(DLink)会报异常,sizeof(DNode)就不会
typedef struct DNode {
    DNode * provide = NULL;
    DNode * next = NULL;
    int data = -1;
    int length = 0;
}DNode,*DLink;
bool ebbDNode(DLink p1 ,int index) {
    DLink p2 = p1;
    for (int i = 0; i < index+1 ; i++)
    {
        p2 = p2->next;
    }
    p2->provide->next = p2->next;
    p2->next->provide = p2->provide;
    p2->length--;
    return true;
}
bool addDNode(DLink p1, int index, int num) {
    DLink p2 = p1;
    DLink newNode = (DLink)malloc(sizeof(DNode));
    for (int i = 0; i < index + 1; i++)
    {
        p2 = p2->next;
    }
    p2->next->provide = newNode;
    newNode->next = p2->next;
    p2->next = newNode;
    newNode->data = num;
    p1->length++;
    return true;
}

int main() {
    //建表
    DLink L1 = (DLink)malloc(sizeof(DNode));
    //L1->data = -1;
    DLink p;
    DLink r1;
    r1 = L1;
    p = L1;
    for (int i = 0; i < 10; i++)
    {
        DLink r = (DLink)malloc(sizeof(DNode));
        p->next = r;
        r->provide = p;
        r->data = i;
        r->next = NULL;
        L1->length++;
        p = r;
        
    }

    ebbDNode(L1, 6);
    addDNode(L1, 4, 3);//这一个函数会报异常
    for (int i = 0; r1->next != NULL; i++)
    {
        printf("%d\n", r1->data);
        r1 = r1->next;
    }
    return 0;
}

Dlink是个指针,指针的长度和指针指向的结构体的长度无关,所以只malloc指针大小的空间是不够的,必须至少分配足够的空间供结构体使用.
有帮助望采纳~

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632