我不知道动态分配内存的正确方法是什么:
我有一个 .csv 文件,大约有 50 行,我需要在内存中分配足够的空间来将文件的每一行保存在结构向量的一个空间中。
另外,我知道 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;
}
对吗?如果不是,这是正确的方法。我没有错误,但我不知道为什么它似乎不对。
完全错误的,从这里开始
这是错误的
p_array = (int *) malloc(vector_size * (int)); /* ^ what is this? */
如果你想要一个
vector_size
大小的整数数组,你需要p_array = malloc(vector_size * sizeof(int)); /* ^ the sizeof operator */
这完全没有意义
my_struct struc[p_array];
也许你的意思是?
my_struct struc[vector_size];
上面你传递了一个指针,一个整数应该去的地方,如果这编译,那么发生的事情是存储在指针中的地址被评估为整数,因此你的
struc
数组的大小与你想象的非常不同如果您使用更正版本,则
malloc()
完全没有意义,因此您并不真正需要它。
如果要动态分配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 中不需要强制转换malloc()