1

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 に慣れていないので、私が見ていない明らかな何かがあるかもしれません。

どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1

6

これは正しくありません:

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

に十分なメモリを割り当てるだけで、。には割り当てSCEP_CONF*ないためSCEP_CONFです。そのはず:

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

読む価値がありますmallocの結果をキャストしますか?

于 2012-07-26T10:05:27.557 に答える