对函数中的typedef创建的变量使用malloc

时间:2014-11-05 19:20:44

标签: c malloc

我想创建一个初始尺寸为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;
}   

3 个答案:

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