【发布时间】:2019-10-31 14:49:05
【问题描述】:
free() 编译时似乎没有释放内存。我之前使用malloc() 进行了分配,并对其进行了测试以确保指针不为空。
这些是我在编译代码时遇到的错误:
malloc: * 对象 0x7ffee53e1aa4 的错误:被释放的指针是 未分配 malloc:* 在 malloc_error_break 中设置断点为 调试
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;
}
【问题讨论】:
-
如果
NULL测试为真,您实际上应该中止程序 -
sump = &sum;丢失分配的值。你想做什么? -
sump = &sum;表示指针sump现在指向自动变量sum,因此当您尝试释放它时会出错。free(sump);表示释放sump指向的内存。 -
代码应该是
*sump = sum;|*multp = mult;. -
这是运行时错误,不是编译时错误。