1

我是 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);
}

内存被释放了吗?

4

1 回答 1

1

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

所以检查你是否真的释放一切的唯一方法是使用内存调试器。Valgrind是一个不错的选择。

于 2013-08-05T13:57:51.910 回答