动态分配结构向量内存

时间:2015-03-14 14:20:25

标签: c vector struct malloc

我不知道动态分配内存的正确方法是什么:
我有一个 .csv 文件,它有50行,我需要在内存中分配足够的空间,以便在结构向量的一个空格中保存文件的每一行。< / p>

另外,我知道 malloc 的返回是分配的内存空间的第一个位置。

示例:

typedef struct{
   int a;
   float b;
   char name[10]; //This will be set dynamically too, later...
}my_struct;

int main(){
   int *p_array;
   size_t vector_size = 2;  //Same as doing:  my_struct struc[2]   ?

   p_array = (int *) malloc(vector_size * (int));
   my_struct struc[p_array];

   return 0;
}  

是不是?如果不是这样做的正确方法。我没有错误,但我不知道为什么它看起来不对。

1 个答案:

答案 0 :(得分:3)

这是完全错误的,从这里开始

  1. 这是错误的

    p_array = (int *) malloc(vector_size * (int));
    /*                                       ^ what is this? */
    

    如果你想要一个vector_size大小的整数数组,你需要

     p_array = malloc(vector_size * sizeof(int));
     /*                                ^ the sizeof operator */
    
  2. 这根本没有意义

    my_struct struc[p_array];
    

    也许你的意思?

    my_struct struc[vector_size];
    
    上面你传递一个整数应该去的指针,如果这个编译然后发生的事情就是存储在指针中的地址被评估为一个整数,因此你的struc数组的大小与你的想法

    如果使用更正版本,malloc()完全没有意义,所以你真的不需要它。

  3. 如果要动态分配struc数组,那么

    my_struct *array;
    
    array = malloc(elementCount * sizeof(my_struct)):
    if (array == NULL)
        pleaseDoNot_Use_array_AndProbably_AbortHere();
    /* you can use it here, and when you finish */
    free(array);
    

    如果你启用了编译器警告,会有一些警告让你知道我上面提到的一些事情。

    另外,在c There is no need to cast malloc()