新定义的数据类型的n个指针的内存分配

问题描述 投票:0回答:1

我需要:

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; }

c pointers types malloc
1个回答
3
投票
不同之处在于,第一个分配了指针数组,但随后对这些指针不执行任何操作(即,它们都将包含未定义且不可用的地址)。您可以通过使用calloc代替calloc来改进此版本,它会初始化所有指向malloc的指针(以便可以在尝试取消引用之前,在代码中的其他地方测试每个指针)。

第二种解决方案还为每个数据块分配内存,并将这些块的地址分配给指针。从这个意义上讲,第二个是更多的[[complete,但不一定是更多的[[correct。

但是,完成后不要忘记释放数据:

NULL

© www.soinside.com 2019 - 2024. All rights reserved.