我想创建一个初始尺寸为intarr_t
的新len
,但我从未使用typedef
&#39; ed变量处理此类问题。< / p>
我的问题是intarr_create()
应该分配数组空间,然后在malloc成功时返回指向它的指针,如果失败则返回指向NULL
的指针。我该如何解决这个问题?
另外,为什么函数中有*符号?
这是我的代码:
#include <stdio.h>
typedef struct {
int* data;
unsigned int len;
} intarr_t;
intarr_t* intarr_create(unsigned int len) {
//intarr_t with initial size len
intarr_t = (int *) malloc(len); // not working here, can someone explain why?
if(intarr_t != NULL) {
return intarr_t;
} else {
return NULL;
}
}
int main() {
int len = 15;
int h = intarr_create(len);
printf("%d\n", h);
return 0;
}
答案 0 :(得分:2)
它没有用,因为你没有给变量命名。此外,int*
和intarr_t
的类型不同,因此除非您更改演员表,否则您将获得类型不匹配。
答案 1 :(得分:1)
将您的功能重写为:
intarr_t* intarr_create(unsigned int len)
{
intarr_t *result;
result = (intarr_t *)malloc(sizeof(intarr_t)); // allocate memory for struct
if(result != NULL)
{
result->data = (int *)malloc(len * sizeof(int)); // allocate memory for data
result->len = len;
if (result->data == NULL)
{
/* handle error */
}
}
else
{
/* handle error */
}
return (result);
}
你必须做一个&#34; double&#34; malloc是正确的。首先,您必须为intarr_t
分配内存,如果成功,则必须为数据阵列分配内存。
此外malloc
返回void *
,必须将其转换为正确的指针类型(应该是警告,或者甚至是某些编译器的错误)。
答案 2 :(得分:0)
您的intarr_create
功能存在一些问题。首先,您需要命名intarr_t
变量。现在除了你的intarr结构之外,你还有一个稍微棘手的问题,即为实际的整数数组分配内存。请记住,您必须调用delete 两次来销毁此对象。一旦进入数据,一旦进入实际结构本身。
intarr_t* intarr_create(unsigned int len)
{
intarr_t* array = (intarr_t*)malloc(sizeof(intarr_t));
array->data = (int*)malloc(len * sizeof(int));
return array;
}