使用malloc的分段故障-C

使用malloc的分段故障-C,malloc,Malloc,我试图为指向对象的指针数组分配内存。 ObjectP是指向结构命名对象的指针。 在该函数之前,我在数组上声明为:ObjectP*array。所以数组是指向对象的指针数组的指针。 然后我发送&数组,这样我就有了一个指向它的指针。 假设我的桌子是2号的。当我尝试输入*array[1]=NULL时,我得到了分段错误。 有什么问题 这是我的代码: void allocateArrayMemory(ObjectP** array,size_t table_size) { *arra

我试图为指向对象的指针数组分配内存。 ObjectP是指向结构命名对象的指针。 在该函数之前,我在数组上声明为:ObjectP*array。所以数组是指向对象的指针数组的指针。 然后我发送&数组,这样我就有了一个指向它的指针。 假设我的桌子是2号的。当我尝试输入*array[1]=NULL时,我得到了分段错误。 有什么问题

这是我的代码:

    void allocateArrayMemory(ObjectP** array,size_t table_size)
    {
    *array=(ObjectP*)malloc(table_size*sizeof(ObjectP));
    int i=0;
    for (i = 0; i < (int)table_size; ++i)
    {
        *array[i]=NULL;
        printf("%d\n",i);
    }
    printf("finished allocating\n");
    if(*array==NULL)
    {
        printf("null\n");
    }

    }
void allocateArrayMemory(ObjectP**array,size\u t table\u size)
{
*数组=(ObjectP*)malloc(表大小*sizeof(ObjectP));
int i=0;
对于(i=0;i<(int)表_size;++i)
{
*数组[i]=NULL;
printf(“%d\n”,i);
}
printf(“已完成分配\n”);
如果(*数组==NULL)
{
printf(“null\n”);
}
}

代码
*数组[i]=NULL
的行为类似于
*(数组[i])=NULL(*array)[i]=NULL

当i=1时,
*(数组[i])
取消引用传入AllocaterRayMemory的
结构对象***
之后的
结构对象***
,而
(*array)[i]
取消引用新malloced内存区域中的第二个
结构对象**

一些注意事项:

  • 修正标题中“分段”的拼写

  • 使用前测试malloc的结果。在您的代码中,使用*数组后有一个测试;把它移上去

  • 我建议使用
    memset(*array,0,table_size*sizeof(ObjectP))而不是用于初始化*数组的循环

  • 在C语言中,使用malloc结果是不好的。相反,只需说
    *array=malloc(table_size*sizeof(ObjectP))

  • 作为一种风格,我希望allocateArrayMemory是一个返回已分配内存地址的函数,而不是通过参数。例如:

    ObjectP*allocatearraymory(size\u t table\u size){

    ObjectP*array=malloc(表大小*sizeof(ObjectP));

    if(array==NULL){printf…;returnnull;}

    for(i=0;i

    array[i]=NULL;

    返回数组;


  • 在调用者中,
    ObjectP*a;
    a=allocateArrayMemory(6);

    请编辑您的问题并调整格式。请尝试
    (*array)[i]=NULL;
    {
    
    }