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: %dn", 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 %dn", sum, mult);
*multp = mult;
*sump = sum;
}
int* sump = (int*) malloc(1*sizeof(int));
sump
现在指向由 malloc
创建的匿名对象。
sump = ∑
现在,sump
指向您之前定义的对象sum
。分配的对象丢失。
if(sump != NULL){
free(sump);
}
NULL
检查是不必要的,因为free(NULL)
是合法的,什么都不做。但由于sump
不再指向已分配的对象,因此free(sump)
具有未定义的行为。(您很幸运,您的运行时系统能够为您诊断它。
错误消息是在运行时生成的,而不是在编译时生成的。
而且您缺少代码顶部所需的 #include
指令:
#include <stdio.h>
#include <stdlib.h>