2014-01-21 21 views
-1

什么是为temp_comercial temp_active_substance分配内存的正确方法? 这个分配会导致内存泄漏吗?我只需要一个答案为字符指针分配内存的正确形式..内存分配可能的内存泄漏

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); 
+1

为C.你更容易找到与这种代码在标签经验的人你或许应该标记这一点。 – juanchopanza

+1

由于在代码中无法找到一个'free()'调用,所以很可能发生了内存泄漏。 –

+0

也**注**你有指针指向字符指针,而不是简单的字符指针! –

回答

4

如果泄漏或不..

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

你必须确保你delete仅此代码不能决定/ free存储器中,如下环..

for (i=0; i<order; i++) { 
    free(temp_comercial_name[i]); 
} 
free(temp_comercial_name); 

编辑:free后设置NULL。关于这个话题的讨论有很多。

NULL after free or not

+0

'sizeof(char)'是多余的,因为标准_guarantees_一个字符的大小必须是“1”。最好还是将内存分配为'var_name = malloc(n * sizeof(* var_name));',尽管如果您决定更改给定var的类型,您不必再花费更改所有分配相关代码 –

+0

@EliasVanOotegem完全同意sizeof(char)点! –