C 我的内存泄漏在哪里?
有人能帮我找到内存漏洞吗?我用valgrind检查泄漏,但我找不到它报告的泄漏。谢谢C 我的内存泄漏在哪里?,c,C,有人能帮我找到内存漏洞吗?我用valgrind检查泄漏,但我找不到它报告的泄漏。谢谢 bigint* bi_create(const char* charint) { int length = 0; const char* temp; int flag = 0; temp = charint; while(*charint != '\0') { length++; charint++;
bigint* bi_create(const char* charint)
{
int length = 0;
const char* temp;
int flag = 0;
temp = charint;
while(*charint != '\0')
{
length++;
charint++;
}
char chartoint[length];
charint = temp;
//printf("LENGTH = %d \n", length);
bigint* bi = malloc(sizeof(bigint));
bi->length = length;
int counter = 0;
bi->initialzero = 0;
while(*charint != '\0')
{
if(*charint == '0' && flag != 1)
{
(bi->initialzero)++;
}else
{
flag = 1;
}
chartoint[counter] = *charint;
// printf("CHARTOINT = %c \n", chartoint[counter]);
charint++;
counter++;
}
bi->data = atoi(chartoint);
printf("DATA = %d \n", bi->data);
// printf("INITIAL ZERO = %d \n", bi->initialzero);
return bi;
}
此函数中没有内存泄漏。但是,如果调用方没有释放此函数分配的内存,它将泄漏。在函数中有一个malloc:
bigint* bi = malloc(sizeof(bigint));
调用此函数时:
bigint my_big_int = bi_create(my_string);
在离开之前,不要忘了释放它:
free(my_big_int);
就这样 剩下的代码在哪里?这个函数肯定需要一些简化。第一个while循环可以替换为
length=strlen(charint)
。在第二个while循环中,为什么要复制到ChartPoint?为什么不直接做bi->data=atoi(charint)
?谢谢。我知道我必须释放内存,但我的代码有问题。