[malloc在c中返回NULL

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

我有一个带有两个char *的结构。名称为Message。当我尝试分配这样的空间时:Message *temp = (Message *)malloc(size * sizeof(Message));

返回NULL。那时size为2,sizeof(Message)为8。

我尝试使用perror查找错误。它向我显示此消息:没有足够的空间

消息定义是:

struct Message
{
    char *sender;
    char *content;
};

[我想像c ++向量一样动态分配内存,并且此行是将消息push_back存入Message*的函数的一部分

void message_push_back(Message **messages, Message m, int *m_size, int *m_index)
{
    *m_index += 1;
    int index = *m_index;
    int size = *m_size;
    if(index < size)
    {
        *(*messages + index) = m;
    }
    else
    {
        size *= 2;
        Message *temp = (Message *)malloc(size * sizeof(Message));
        perror("malloc failed");
        for (int i = 0; i < index; ++i)
        {
            temp[i] = (*messages)[i];
        }
        temp[index] = m;
        free(*messages);
        *messages = temp;
    }
    *m_size = size;
}
c memory malloc allocation
1个回答
-2
投票

我认为问题在于char *本身是需要分配的NULL指针。因此,我认为这就是您的意思

typedef struct Message {
     char* p;
     char* q;

}Message;

您需要分配p和q本身。

[最好还是使用p和q的堆栈分配字符p [10];字符q [10];

或者消息的对象应该在堆上分配。

类似:

Message Joel = {malloc(10 * sizeof(char)), malloc(20 * sizeof(char))};
© www.soinside.com 2019 - 2024. All rights reserved.