打印元素后崩溃

时间:2018-02-08 12:17:35

标签: c arrays

我的程序在运行时崩溃并出现以下错误:

  

“在caza.exe中的0x777433D5(ntdll.dll)处抛出异常:0xC0000005:访问冲突读取位置0x00000003。”

出了什么问题?

我已尝试在main处使用该免费功能而没有它并遇到同样的错误。

#include <stdio.h>
#include <malloc.h>

typedef struct Dreptunghi
{
    int x1, y1, x2, y2;
}Dreptunghi;

void readElements(Dreptunghi* pDreptunghi, int nDreptunghi)
{


    for (int i = 0; i < nDreptunghi; ++i)
    {
        printf("Introduceti valorile pentru dreptunghiul %d \n", i + 1);
        scanf("%d %d %d %d",
            &pDreptunghi[i].x1,
            &pDreptunghi[i].y1,
            &pDreptunghi[i].x2,
            &pDreptunghi[i].y2);
    }

    printf("\n");
}

void printElements(Dreptunghi* pDreptunghi, int nDreptunghi)
{
    for (int i = 0; i < nDreptunghi; ++i)
    {
        printf("%d %d %d %d\n", 
        pDreptunghi[i].x1, 
        pDreptunghi[i].y1, 
        pDreptunghi[i].x2, 
        pDreptunghi[i].y2);
    }
}

int main()
{
    Dreptunghi* pDreptunghi = NULL;
    int n=0;
    scanf("%d", &n);
    pDreptunghi = (Dreptunghi*)malloc(n+1);
    readElements(pDreptunghi, n);
    printElements(pDreptunghi, n);
    free(pDreptunghi);
    return 0;
}

2 个答案:

答案 0 :(得分:4)

变化

pDreptunghi = (Dreptunghi*)malloc(n+1);

pDreptunghi = malloc( (sizeof(*pDreptunghi)*n) + 1);

答案 1 :(得分:0)

你没有在这里分配足够的内存,你需要分配一个等于结构大小的内存乘以元素的数量:

pDreptunghi =(Dreptunghi *)malloc((sizeof(* pDreptunghi)* n)+1);