我有一个带有两个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;
}
我认为问题在于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))};