c巴拉巴拉 2023-09-19 13:45 采纳率: 87.5%
浏览 3
已结题

动态内存分配一直创建成功?内存大小为第一次创建,以后不在变化?

struct P
{
    int z;
    int* arr;
};

int main()
{
struct P* p=(struct P*)malloc(sizeof(struct P));
    if(p == NULL)
    {
        printf("%s \n",strerror(errno));
    }
    else
    {
        p->arr=(int*)malloc(4*sizeof(int));
        if(p->arr == NULL)
        {
            printf("%d \n",strerror(errno));
        }
        else
        {
            p->z=100;
            int j=0;
            for(j=0;j<4;j++)
            {
                p->arr[j]=j;
            }
            printf("    ");
            for(j=0;j<4;j++)
            {
                printf("%d ",p->arr[j]);
            }
            printf("\n");
            printf("    %d \n",p->z);
            free(p->arr);
            p->arr=NULL;
            printf("%d \n",sizeof(p));
            free(p);
            p=NULL;
        }
    }
}

img


改变struct P 为什么一直创建成功
改变p->arr的malloc参数为什么,p的内存大小始终不变

  • 写回答

2条回答 默认 最新

  • 隐蔽之鲷 2023-09-19 14:13
    关注

    只要创建p,malloc有空间就一定不为NULL,而且你的结构体的大小就8在堆中几乎不占多少,所以目前基本数看不见堆栈溢出
    最后一直查的是结构体p的大小,结构体p是int类型(4),int *arr是指针(4),所以你无论怎么修改指针所指向的数组长度,但是数组的指针地址还是4

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月19日
  • 已采纳回答 10月11日
  • 创建了问题 9月19日

悬赏问题

  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker
  • ¥15 数学建模大赛交通流量控制
  • ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
  • ¥50 paddleocr最下面一行似乎无法识别
  • ¥15 求某类社交网络数据集
  • ¥15 靶向捕获探针方法/参考文献
  • ¥15 很抱歉出现错误word不能启动(24),如何解决?
  • ¥15 javascript下载网络图片
  • ¥15 excel中的填充效果 对应poi的哪个对象啊