Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 内存分配可能存在内存泄漏_C - Fatal编程技术网

C 内存分配可能存在内存泄漏

C 内存分配可能存在内存泄漏,c,C,为临时商业临时活性物质分配内存的正确方法是什么? 此分配是否会导致内存泄漏?我只需要一个正确的答案,为字符指针分配内存 int * temp_quantity; void ** temp_pointers; char ** temp_comercial_name; char ** temp_active_substance; char ** temp_manufacturer; char ** temp_expiry_date; int insertion_index, split, new_k

为临时商业临时活性物质分配内存的正确方法是什么? 此分配是否会导致内存泄漏?我只需要一个正确的答案,为字符指针分配内存

int * temp_quantity;
void ** temp_pointers;
char ** temp_comercial_name;
char ** temp_active_substance;
char ** temp_manufacturer;
char ** temp_expiry_date;
int insertion_index, split, new_key, i, j;

new_leaf = make_leaf();

temp_keys = malloc( order * sizeof(int) );
if (temp_keys == NULL) {
    perror("Temporary keys array.");
    exit(EXIT_FAILURE);
}
temp_quantity = malloc( order * sizeof(int) );
if (temp_quantity == NULL) {
    perror("Temporary quantity array.");
    exit(EXIT_FAILURE);
}
temp_pointers = malloc( order * sizeof(void *) );
if (temp_pointers == NULL) {
    perror("Temporary pointers array.");
    exit(EXIT_FAILURE);
}

temp_comercial_name = malloc(order);
for(i = 0 ; i < order ; i++)
    temp_comercial_name[i] = malloc( sizeof(char) * 20); 

temp_active_substance = malloc(order);
for(i = 0 ; i < order ; i++)
    temp_active_substance[i] = malloc( sizeof(char) * 20); 

temp_manufacturer = malloc(order);
for(i = 0 ; i < order ; i++)
    temp_manufacturer[i] = malloc( sizeof(char) * 20); 

temp_expiry_date = malloc(order);
for(i = 0 ; i < order ; i++)
    temp_expiry_date[i] = malloc( sizeof(char) * 20); 
int*temp\u数量;
void**temp_指针;
字符**临时商业名称;
炭**温度活性物质;
char**temp_制造商;
字符**临时失效日期;
int insertion_index,split,new_key,i,j;
新建_叶=制作_叶();
temp_keys=malloc(订单*sizeof(整数));
如果(临时键==NULL){
perror(“临时密钥数组”);
退出(退出失败);
}
临时数量=malloc(订单*sizeof(整数));
如果(临时数量==NULL){
perror(“临时数量数组”);
退出(退出失败);
}
temp_pointers=malloc(订单*sizeof(无效*);
if(临时指针==NULL){
perror(“临时指针数组”);
退出(退出失败);
}
临时商业名称=malloc(订单);
对于(i=0;i
仅此代码无法决定是否泄漏

temp_comercial_name = malloc(order);
for(i = 0 ; i < order ; i++)
    temp_comercial_name[i] = malloc( sizeof(char) * 20); 
编辑:在
自由
之后设置
NULL
。关于这个话题有很多讨论


您可能应该将其标记为C。您更可能在该标记中找到对此类代码有经验的人。由于a无法在您的代码中发现单个
free()
调用,因此很可能存在内存泄漏。另外请注意,您有指向字符指针的指针,而不是普通的字符指针!我已重新标记为C。任何反对者请评论或回滚。
sizeof(char)
是多余的,因为标准保证char的大小必须小于code>1。最好还是将内存分配为
var_name=malloc(n*sizeof(*var_name)),但是。。。如果您决定更改给定var的类型,那么您不必花费太多时间来更改所有与分配相关的代码
for (i=0; i<order; i++) {
   free(temp_comercial_name[i] );
}
free(temp_comercial_name);