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