gpt4 book ai didi

c - 即使在我使用 malloc() 分配内存后,free() 也无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:38 25 4
gpt4 key购买 nike

free() 在我编译时似乎没有取消分配内存。我之前使用 malloc() 进行了分配,并对其进行了测试以确保指针不为空。

这些是我在编译代码时遇到的错误:

malloc: * error for object 0x7ffee53e1aa4: pointer being freed was not allocated malloc: * set a breakpoint in malloc_error_break to debug

void math(int array[], int length, int* sum, int* mult);

int main(void)
{
int sum = 0;
int mult = 1 ;
int a[] = {1, 33, 12, 2, 9, 2};

int* sump = (int*) malloc(1*sizeof(int));

if(sump == NULL){
printf("sump is null");
}

int* multp = (int*) malloc(1*sizeof(int));

if(multp == NULL){
printf("multp is null");
}

sump = ∑
multp = &mult;

math(a, 6, sump, multp);

if(sump != NULL){
free(sump);
}
if(multp != NULL){
free(multp);
}

printf("sum: %d mult: %d\n", sum, mult);


return 0;
}

void math(int array[], int length, int* sump, int* multp)
{
int i;
int sum = 1;
int mult = 1;

for(i=0; i<length;++i){
sum += array[i];
mult *= array[i];

}

printf("%d %d\n", sum, mult);

*multp = mult;
*sump = sum;

}

最佳答案

int* sump = (int*) malloc(1*sizeof(int));

sump 现在指向一个由 malloc 创建的匿名对象。

sump = &sum;

现在sump 指向您之前定义的对象sum。分配的对象丢失。

if(sump != NULL){
free(sump);
}

NULL 检查是不必要的,因为 free(NULL) 是合法的并且什么都不做。但是由于 sump 不再指向分配的对象,因此 free(sump) 具有未定义的行为。 (你很幸运,你的运行时系统能够为你诊断它。)

错误消息是在运行时生成的,而不是在编译时生成的。

并且您在代码顶部缺少必需的 #include 指令:

#include <stdio.h>
#include <stdlib.h>

关于c - 即使在我使用 malloc() 分配内存后,free() 也无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56640968/

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