gpt4 book ai didi

c - 使用 malloc、struct 和 char * 的堆损坏

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:06 24 4
gpt4 key购买 nike

我的 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 的新手,所以可能有一些明显的东西我没有看到。

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

最佳答案

这是不正确的:

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

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

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

值得一读Do I cast the result of malloc?

关于c - 使用 malloc、struct 和 char * 的堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11666954/

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