[英]Using MPI_Type_create_struct() to transfer structs containing dynamic arrays in C
[英]opaque c struct containing dynamic arrays
这是为包含动态数组的结构分配内存的正确方法吗? 特别是,考虑到尚不知道结构的实际大小,我为myStruct分配内存的方式是否正确?
//test.h
struct Test;
struct Test * testCreate();
void testDestroy(struct Test *);
void testSet(struct Test *, int);
//test.c
#include <stdlib.h>
struct Test{
double *var;
};
struct Test * testCreate(int size){
struct Test *myTest = (struct Test *) malloc(sizeof(struct Test));
myTest->var = malloc(sizeof(double)*size);
return(myTest);
}
void testDestroy(struct Test * myTest){
free(myTest->var);
free(myTest);
}
void testSet(struct Test * myTest, int size){
int i;
for (i=0;i<size;++i){
myTest->var[i] = i;
}
}
struct
具有固定的大小,这就是sizeof
返回的内容。
您的结构具有on元素,双指针,并且具有(与平台有关的)固定大小。
您的testCreate
函数可以正确执行操作。 如果您不知道动态分配的部分的大小,可以将指针设置为NULL
以表示必须稍后分配内存。
是的,您正确地为该结构分配了空间,然后为该结构中的双精度数组分配了空间。 实际上,在尝试使用内存之前,应始终测试malloc()的返回是否为NULL。 同样,大多数类似这样的程序也将数组的大小存储在结构中,因此您可以编写更通用的代码以确保它不会在分配的空间的末尾运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.