在 glib 的 g_new() 中使用内存分配
Using Memory Allocation with glib's g_new()
我一直在使用 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*/
我的分配哪里出错了?
您已分配 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] 有效
你说你想创建一个包含 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_* class 函数是非标准的。请使用 malloc 和 free。
我一直在使用 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*/
我的分配哪里出错了?
您已分配 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] 有效
你说你想创建一个包含 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_* class 函数是非标准的。请使用 malloc 和 free。