我需要:
a)定义一个名为[[mytype的数据类型(由我自己选择)。
b)并具有函数getmemory(int n),为类型mytype
的n个值保留内存并返回一个指针。我已经实现了,如下所示:typedef int mytype;
// b)
mytype *getmemory(int n)
{
mytype *p;
//allocate space for n values of mytype.
p = (mytype *)malloc(n * sizeof(mytype));
return p;
}
现在,我想更改代码以保留并返回n个指向[[mytype的指针的内存。我不确定该怎么做,我已经在互联网上(也在StackOverflow上)进行了很多搜索,但是我仍然不确定如何最好地解决任务。下面,我有两种可能的解决方案,并且想知道哪一种是正确的。
解决方案:1。解决方案:
mytype **getmemoryForNPointer(int n_mytype)
{
mytype **p = NULL;
p = (mytype **) malloc(n_pointers * sizeof(mytype *));
return p;
}
2。解决方案
mytype **getmemoryForNPointer(int n_mytype, int n_pointers)
{
mytype **p = NULL;
//allocate n pointers to mytype first:
p = (mytype **) malloc(n_pointers * sizeof(mytype*));
//I'm not sure the for loop belongs in there.
for (int i = 0; i < n_pointers; i++)
{
// For each such pointer, allocate space for n mytype-values.
p[i] = (mytype *)malloc(n_mytype * sizeof(mytype));
}
return p;
}
calloc
代替calloc
来改进此版本,它会初始化所有指向malloc
的指针(以便可以在尝试取消引用之前,在代码中的其他地方测试每个指针)。第二种解决方案还为每个数据块分配内存,并将这些块的地址分配给指针。从这个意义上讲,第二个是更多的[[complete,但不一定是更多的[[correct。
但是,完成后不要忘记释放数据:
NULL