qq_17458949
qq_17458949
2015-08-10 15:11
采纳率: 100%
浏览 3.7k
已采纳

如何解决C语言给结构体当中的数组分配堆空间的问题

#include
#include
struct A{
int num[3];
};

int main()
{
int i,j;
struct A *a = (struct A *)calloc(3,sizeof(struct A));
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
a[i].num[j] = (int *)calloc(1,sizeof(int));
}
for(i=0;i<3;i++)
free(a[i].num[j]); //编译器编译显示这里出错
free(a);
return 0;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • wafstudio
    wafstudio 2015-08-10 15:29
    已采纳
    int _tmain(int argc, _TCHAR* argv[])
    {
        int i,j;
        struct A *a = (struct A *)calloc(3,sizeof(struct A));
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                int * ptr = (int *)calloc(1,sizeof(int));
                a[i].num[j] = (int)ptr;
            }
        }
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                free((int*)a[i].num[j]); //编译器编译显示这里出错
            }
        }
        free(a);
        return 0;
    }
    
    

    你这问题陷阱太多了:)
    我是按照你想在num数组中存储指针处理的。

    点赞 评论
  • wafstudio
    wafstudio 2015-08-10 15:18

    struct A{
    int num[3];
    };
    中num是数组,不用分派空间,给A分派空间后num自然就有了。
    a[i].num[j]是数组值,不是指针,free肯定会出问题,删掉即可。

    点赞 评论
  • qq_17458949
    qq_17458949 2015-08-10 15:30

    不是这样的一定要给结构体当中的元素分配空间
    #include
    #include
    struct A{
    int num[3];
    };
    int main()
    {
    int i,j;
    struct A *a = (struct A *)calloc(3,sizeof(struct A));
    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++)
    a[i].num[j] = (int *)calloc(1,sizeof(int));
    }
    for(i=0;i<3;i++)
    free(a[i].num[j]); //编译器编译显示这里出错
    free(a);
    return 0;
    }
    如果这样打印出来就会乱码

    点赞 评论
  • caozhy

    分配堆空间用malloc

    free(a[i].num[j]);
    ->
    free(a[i].num[0]);
    free(a[i].num[1]);
    free(a[i].num[2]);

    点赞 评论
  • a1193561652
    纵横车 2015-08-10 15:44

    “a[i].num[j]”定义的是int型,当然报错。强制转换int*试试,或者定义的时候就定义成int*。

    点赞 评论
  • xuweiwei1860
    fly 100% 2015-08-11 01:33

    把两个for 揉一起吧

    点赞 评论
  • wafstudio
    wafstudio 2015-08-11 14:53
    #include "stdafx.h"
    #include "stdlib.h"
    
    struct A{
        int num[3];
    };
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int i,j;
        struct A *a = (struct A *)calloc(3,sizeof(struct A));
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                int * ptr = (int *)calloc(1,sizeof(int));
                printf("%d\n",(int)ptr);
                printf("%d\n",*ptr);
    
                a[i].num[j] = (int)ptr;
            }
        }
    
        printf("\n-------------\n");
    
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                printf("%d\n",a[i].num[j]);
                printf("%d\n",*(int*)a[i].num[j]);
    
                free((int*)a[i].num[j]); //编译器编译显示这里出错
            }
        }
        free(a);
        return 0;
    }
    
    

    图片说明

    IDE:VC2008

    点赞 评论
  • chaobo_lu
    零度永恒 2015-08-12 11:37

    怎么不用指针数组呢,更方便些。

    点赞 评论

相关推荐