malloc错误:读取文件的struct中释放对象的校验和不正确
所以我有这个函数:malloc错误:读取文件的struct中释放对象的校验和不正确,c,malloc,C,Malloc,所以我有这个函数: source_t * source_init(char * argsource) { source_t * temp = (source_t *) malloc(sizeof(source_t *)); temp->path = realpath(argsource, NULL); temp->dir = dirname(temp->path); temp->name = basename(temp->path);
source_t * source_init(char * argsource)
{
source_t * temp = (source_t *) malloc(sizeof(source_t *));
temp->path = realpath(argsource, NULL);
temp->dir = dirname(temp->path);
temp->name = basename(temp->path);
temp->ext = strrchr(temp->name, '.');
temp->content = read_file(temp->path); // here
temp->error = error_free();
return temp;
}
它正在调用函数读取文件()
:
出现此错误:
malloc:**object 0x7faf08402698的错误:释放的对象的校验和不正确-对象可能在被释放后被修改。
因此,我当前的解决方案是在调用主函数中的source_init()
后单独初始化内容。尽管该解决方案有效,但我希望内容在源代码
中进行初始化。另外,我似乎无法直接调用source\u init()
来初始化内容
,因为出现了相同的错误,所以我必须创建一个缓冲区来调用source\u init()
,并初始化内容
来缓冲。这可能不是您想要做的:
source_t * temp = (source_t *) malloc(sizeof(source_t *));
为指向源对象的指针或源对象分配空间的
另外,在C中,不应该强制转换malloc的返回值。这样做可能会隐藏错误,并使它们很难找到。这可能不是您想要做的:
source_t * temp = (source_t *) malloc(sizeof(source_t *));
为指向源对象的指针或源对象分配空间的
另外,在C中,不应该强制转换malloc的返回值。这样做会隐藏错误,并使它们很难找到。在malloc()行的source_init()中,您有一个错误
应该是:
source_t*temp=(source_t*)malloc(sizeof(source_t))代码>
而不是:
source_t*temp=(source_t*)malloc(sizeof(source_t*))代码>在malloc()行的source_init()中,您有一个错误
应该是:
source_t*temp=(source_t*)malloc(sizeof(source_t))代码>
而不是:
source_t*temp=(source_t*)malloc(sizeof(source_t*))代码>在上展开
不要播放malloc
,calloc
或realloc
。这只是掩盖了潜在的错误
如果可能,在计算尺寸时不要使用sizeof()
。在****中,很容易犯错误并使代码的重新分解成为一种痛苦
用这个代替
source_t *temp = malloc(sizeof *temp);
这样做的好处是sizeof*temp
返回的字节数准确无误,您不必考虑正确的类型(如处理双/三指针时),如果您必须更改数据类型,可以使用source2\u t
,然后,您只需更改变量的类型,而不必担心容易被忽略的讨厌的sizeof()
。继续
不要播放malloc
,calloc
或realloc
。这只是掩盖了潜在的错误
如果可能,在计算尺寸时不要使用sizeof()
。在****中,很容易犯错误并使代码的重新分解成为一种痛苦
用这个代替
source_t *temp = malloc(sizeof *temp);
这样做的好处是sizeof*temp
返回的字节数准确无误,您不必考虑正确的类型(如处理双/三指针时),如果您必须更改数据类型,可以使用source2\u t
,然后,您只需更改变量的类型,而不必担心容易被忽略的讨厌的sizeof()
。除了可维护性之外,另一个原因是使用表单source\t*temp=malloc(sizeof(*temp))代码>可维护性之上的另一个原因是使用表格source\t*temp=malloc(sizeof(*temp))代码>你说“首先”。。。你看到第二个问题了吗?你说“首先”。。。你看到的还有第二个问题吗?