我正在尝试为某些数据结构(数组,矩阵,custom_array,...)分配内存。我认为我面临的问题是我无法将正确的类型转换为我初始化为
NULL
的传递指针。请记住,我正在传递指针的地址init_structs(&ptr1, &ptr2, &ptr3, ...)
):
int init_structures(void* d_decharge,
void* d_poubelles,
void* e_camions,
int m, int n,
int *tamp_id, int* file_msg_id)
{
*d_decharge = (int*)malloc(m * sizeof(int));
if (*d_decharge == NULL){
printf("echec malloc dist_decharge\n");
return 1;
}
*d_poubelles = (int**)new_matrix(m);
if(*d_poubelles == NULL){
printf("echec malloc dist_decharge\n");
return 1;
}
key_t key_tamp = ftok("./src/main.c", 64);
int id = shmget(key_tamp, sizeof(camion_t) * n, 0666 | IPC_CREAT);
if (id == -1){
printf("echec creation du tampon etats_camions, error[%s]\n", strerror(errno));
return 1;
}
*tamp_id = id;
*e_camions = (camion_t*)shmat(*tamp_id, NULL, 0);
key_t key_msg = ftok("./src/main.c", 64);
id = msgget(key_msg, 0666 | IPC_CREAT);
if(id==-1){
printf("echec creation de la file de messages Faffec, error[%s]\n", strerror(errno));
return 1;
}
*file_msg_id = id;
return 0;
}
我尝试声明正确的类型,但这只是遇到了传递复制问题。
我认为我面临的问题是我无法将正确的类型转换为传递的指针[...]。我正在传递指针的地址 (
).init_structs(&ptr1, &ptr2, &ptr3, ...)
您可以执行足够的转换以使您的函数正常工作,但为什么呢? 大多数除算术目的以外的铸造都是设计不良的症状。 在这种情况下,您将(显然)传递一个
int **
、一个 int ***
(恶心)和一个 camion_t **
到 init_structures()
、并依赖于这些类型,但该函数将它们作为类型 接收void *
。 要使用它,您需要将指针转换回函数内的原始类型,但是比将它们作为原始类型传递要干净得多:
int init_structures(int **d_decharge,
int ***d_poubelles,
camion_t **e_camions,
int m, int n,
int *tamp_id, int* file_msg_id) // ...
当然,这是假设这些实际上是正确的类型,因为它们确实应该如此。 但如果原来的
ptr1
、ptr2
和 ptr3
全部是 void *
那么
void **
作为函数参数,而不是 void *
或上述指针类型。