用malloc,struct和char*堆腐败*

jav*_*vex 1 c memory heap malloc heap-corruption

我的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;
Run Code Online (Sandbox Code Playgroud)

标题中的定义:

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;
Run Code Online (Sandbox Code Playgroud)

基本上我不明白为什么它会破坏我的记忆.我是C的新手,因此我可能会看到一些我看不到的东西.

非常感谢任何帮助,谢谢.

hmj*_*mjd 6

这是不正确的:

scep_conf = (SCEP_CONF *) malloc(sizeof(scep_conf)); 
Run Code Online (Sandbox Code Playgroud)

因为它只为a SCEP_CONF*而不是a 分配足够的内存SCEP_CONF.它应该是:

scep_conf = malloc(sizeof(*scep_conf)); /* cast unnecessary. */
Run Code Online (Sandbox Code Playgroud)

值得一读我是否投出了malloc的结果?