gpt4 book ai didi

c - 使用 g_malloc0 后释放内存

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:25 26 4
gpt4 key购买 nike

我是 C 的新手。我正在尝试熟悉 malloc + free。

我有以下结构:

typedef struct {
GstElement* pipeline;
GFile* file;
char* filename;
} Record;

我为该结构分配了一些内存并为其分配了一些数据:

Record* record_start (const char* filename)
{
GstElement *pipeline;
GFile* file;
char* path;

pipeline = gst_pipeline_new ("pipeline", NULL);

/* Same code */

path = g_strdup_printf ("%s.%s", filename, gm_audio_profile_get_extension (profile));
file = g_file_new_for_path (path);

Record *record = g_malloc0 (sizeof (Record));
record->file = file;
record->filename = path;
record->pipeline = pipeline;

return record;
}

然后我尝试释放所有分配的内存:

void record_stop (Record *record)
{
g_assert(record);

/* Same code */

gst_object_unref (record->pipeline));
g_clear_object (&record->file);
g_free (record->filename);
g_free (record);
}

内存是否被释放?

最佳答案

free()void 类型,这意味着您无法检查您的释放是否有效。释放未分配的地址将导致未定义的行为。例如,在 Linux 上,程序会崩溃。

因此,检查您是否真的释放了所有内容的唯一方法是使用内存调试器。 Valgrind是一个很好的。

关于c - 使用 g_malloc0 后释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17930512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com