我有這個困境。fruit是一個結構。
fruit** func2create(const int N, const int M)
{
fruit **arr;
arr = new fruit*[N];
for(int i = 0; i < N; i )
{
arr[i] = new fruit[M];
}
return arr;
}
這個函式回傳一個指向二維陣列的指標,至少我認為它是這樣做的。
現在,有了這個功能,我該如何使用它來制作一個二維陣列?
uj5u.com熱心網友回復:
我不會使用帶有雙指標的符號。這肯定會導致某個地方的記憶體泄漏,因為不清楚誰將清理記憶體。在 C 中,我將使用以下方法之一(使用 std::array 或 std::vector)。這也更符合關于使用 new/delete 的 C 核心指南(https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines查找有關指標和/或 new/delete 的任何內容)
#include <array>
#include <vector>
struct fruit
{
};
// sizes know at compile time then use a function template
template<std::size_t N, std::size_t M>
auto func2create()
{
// create initialized array
std::array<std::array<fruit, M>, N> fruits{};
return fruits;
}
// for runtime sizes use std::vector
// note I don't use ints (they can have negative values
// I don't want to test for that)
auto func2create(const std::size_t n, const std::size_t m)
{
// create n rows of m fruits
std::vector<std::vector<fruit>> fruits(n, std::vector<fruit>(m));
return fruits;
}
int main()
{
// compile time allocate fruits
{
auto fruits = func2create<4, 4>();
auto fruit = fruits[1][1];
}
// runtime alloacted fruits
{
auto fruits = func2create(4ul, 4ul);
auto fruit = fruits[1][1];
}
return 0;
}
uj5u.com熱心網友回復:
例如:
int N = ...;
int M = ...;
fruit** arr = func2create(N, M);
for(int i = 0; i < N; i) {
for(int j = 0; j < M; j) {
// use arr[i][j] as needed...
}
}
...
for(int i = 0; i < N; i) {
delete[] arr[i];
}
delete[] arr;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/407212.html
標籤:
下一篇:是按值傳遞指標還是按參考傳遞相同
