我一直在使用g_new()为单个结构分配内存,这可以通过以下方式使用。
/*Structure*/
typedef struct
{
guint16 index;
gchar * date;
gchar * number;
}h_item;
/*allocation*/
h_item * my_h_item = g_new(h_item, 1);
/*freeing function*/
void free_h_item(h_item * item)
{
g_free(item->date);
g_free(item->number);
g_free(item);
}
我现在正试图对结构的数组[2]做同样的事情,例如 静态分配是这样的,但这意味着它在程序堆栈上。
h_item my_h_item[5];
我想动态分配上面相同的内容,但是在运行程序时我似乎遇到了麻烦......
/*Structure*/
typedef struct
{
guint16 index;
gchar * date;
gchar * number;
}h_item;
/*freeing function*/
void free_h_item(h_item * item)
{
g_free(item->date);
g_free(item->number);
g_free(item);
}
static h_item * my_h_item[2];
int main()
{
/*allocation*/
my_h_item[2] = g_new(h_item, 2);
my_h_item[0]->date = g_strdup("12345"); /*Test*/
return 0;
}
这个程序编译但是段错误......
#0 0x00000000004007a7 in main () at struct_memory.c:30
30 my_h_item[0]->date = g_strdup("12345"); /*Test*/
我的分配在哪里出错?
答案 0 :(得分:3)
您已分配my_h_item [2]并且您正在访问未分配的my_h_item [0]
在使用其元素
之前,您还需要分配my_h_item [0]my_h_item [2]无效,因为my_h_item只有2个元素,只有my_h_item [0]和my_h_item [1]有效
答案 1 :(得分:3)
你说你想要创建一个包含2个结构的数组。 你创建的是一个由两个指针组成的数组。
您需要做的是
static h_item * my_h_item;
然后
h_item = g_new(h_item, 2);
然后,您可以将这两个结构用作h_item[0]
和h_item[1]
,并将其中的日期用作
h_item[0].data = g_strdup(...);
g_ *类函数也是非标准的。请使用malloc并免费。