我有以下代码:
char *get_packet(int cc, char *args[]){
char *packet;
packet = (char*) malloc(30 * sizeof(char));
//other code..
...
return packet;
}
int main(){
int cc = SCANS_TO_ACCUMULATE;
int args[] = {5000};
char *str_args[15];
int i = 0;
for(i; i<((sizeof(args)/sizeof(args[0]))); i++){
char buffer[10];
sprintf(buffer, "%d", args[i]);
str_args[i] = strdup(buffer);
free(buffer);
}
str_args[i] = NULL;
char *pkt;
pkt = get_packet(cc, str_args);
printf("%s\n", pkt);
free(pkt);
pkt = NULL;
getchar();
return 0;
}
然而,运行这会导致我的程序立即崩溃,并且在对Memory博士进行一些检查后,看起来我有内存泄漏,但我似乎无法找到它为什么会发生。我没有正确释放malloc内存吗?提前致谢
答案 0 :(得分:4)
您的代码尝试释放未动态分配的buffer
内存,即。这是一个局部变量数组。这会导致崩溃。
答案 1 :(得分:3)
下面:
char buffer[10];
...
free(buffer);
您无法释放本地数组,删除对free
的调用。当变量超出范围时,内存将自动释放。
答案 2 :(得分:0)
释放本地数组“缓冲区”是未定义的,可能是可怕的行为!除非使用malloc()或calloc()分配,否则不能释放某些东西。它可能会破坏堆并导致崩溃。