Повреждение кучи с помощью malloc, struct и char *

Кажется, у меня есть повреждение памяти в моей программе C. Я использовал _ASSERTE( _CrtCheckMemory( ) );, чтобы найти условие задачи, и оно прерывается на строке, которая говорит scep_conf->engine_str = NULL; прямо перед ним. То есть, если я правильно понял, то malloc перед этим что-то сломал, да?

Итак, это часть кода, которая вызывает проблему:

scep_conf = (SCEP_CONF *) malloc(sizeof(scep_conf));
scep_conf->engine = (struct scep_engine_conf_st *) malloc(sizeof(struct scep_engine_conf_st));
scep_conf->engine_str = NULL;

Определения из шапки:

typedef struct {
    struct scep_engine_conf_st *engine;
    char *engine_str;
} SCEP_CONF;

struct scep_engine_conf_st{
    char *engine_id;
    char *new_key_location;
    int storelocation; 
    char *dynamic_path;
    char *module_path; 
    int engine_usage;
};

SCEP_CONF *scep_conf;

В принципе, я не понимаю, почему это может испортить мою память здесь. Я новичок в C, поэтому может быть что-то очевидное, чего я не вижу.

Любая помощь будет принята с благодарностью, спасибо.


person javex    schedule 26.07.2012    source источник


Ответы (1)


Это неправильно:

scep_conf = (SCEP_CONF *) malloc(sizeof(scep_conf)); 

поскольку он выделяет достаточно памяти только для SCEP_CONF*, а не SCEP_CONF. должен быть:

scep_conf = malloc(sizeof(*scep_conf)); /* cast unnecessary. */

Стоит прочитать Можно ли привести результат malloc?

person hmjd    schedule 26.07.2012