我想创建一个指向 3 个浮点数组的指针数组。这样做的正确方法是什么?
你为什么要一个array of pointers to arrays
?一个array of arrays
还不够吗?(请记住,数组已经类似于指针,它们不是按值传递的,而是在将数组作为参数传递给函数时传递第一个元素的地址)。
// stack allocation, no need to free
float array[SIZE][3];
for (int i = 0; i < SIZE; i++) {
// do something with array[i][0], array[i][1], array[i][2]
}
那么我将如何释放数据?
在这种情况下你不会,因为数据是堆栈分配的(一旦超出范围就会自动清理)。请记住,经验法则是,对于您进行的每个内存分配,都需要相应的空闲空间。因此,如果您为浮点数组分配内存,如
float* arr = malloc(sizeof(float) * 3); // array of 3 floats
然后你只需要在你的数组上调用 free malloc'd
,不需要释放单个浮点数。如果您执行嵌套分配,如
// array of length SIZE, consisting of float pointers
float** arr = malloc(sizeof(float*) * SIZE);
// allocate the array of 3 floats at each index
for (int i = 0; i < SIZE; i++)
arr[i] = malloc(sizeof(float) * 3);
然后您将需要执行 a free
for each malloc
,如
// free the individual arrays
for (int i = 0; i < SIZE; i++)
free(arr[i]);
// free the array of arrays
free(arr);
这里要吸取的教训是避免一起动态分配数组。坚持使用其中一个std::vector
或堆栈分配的数组。