我试图理解以下内容,这三个函数调用如何正常工作,我不确定它在内部是如何工作的,我可以理解第一个很好,但是第二次我用 sizeof 调用 malloc struct 然后打印它,第三次我用结构指针的 sizeof 调用 malloc 并打印它。两者如何可以毫无问题地工作?第二个 malloc 分配的大小为 2*2*int=16 字节,第三个 malloc 分配的大小为 2*pointer=8。而且我在尝试释放 pt2 时得到核心转储,这是在使用 C 和 gcc 的 Linux 上
#include<stdio.h>
#include<stdlib.h>
struct test{
int field1;
int field2;
};
struct test func(int a, int b) {
struct test t;
t.field1 = a;
t.field2 = b;
return t;
}
int main()
{
struct test t;
struct test pt[2];
pt[0] = func(1,1);
pt[1] = func(2,2);
printf("%d %d\n", pt[0].field1,pt[0].field2);
printf("%d %d\n", pt[1].field1,pt[1].field2);
printf("\n");
struct test *pt1;
pt1 = malloc(sizeof(struct test) * 2);
pt1[0] = func(2,2);
pt1[1] = func(3,3);
printf("%d %d\n", pt1[0].field1,pt1[0].field2);
printf("%d %d\n", pt1[1].field1,pt1[1].field2);
printf("\n");
struct test *pt2;
pt2 = malloc(sizeof(struct test*) * 2);
pt2[0] = func(4,4);
pt2[1] = func(5,5);
printf("%d %d\n", pt2[0].field1,pt2[0].field2);
printf("%d %d\n", pt2[1].field1,pt2[1].field2);
free(pt1);
free(pt2);// I'm getting core dump when trying to free pt2
}
输出低于
1 1
2 2
2 2
3 3
4 4
5 5