动态分配的二维数组中使用的用户定义类型

User defined type used in dynamic allocated 2d array

假设我们有一个简单的结构

struct S {
     int a;
     int b;
     int c;
}

现在我们要创建一个指针数组(二维数组 5x5):

S** arr = new S*[5];
for (int i = 0; i < 5; ++i)
    arr[i] = new S[5];

我的问题是:

  1. 使用new为这个数组动态分配内存是否正确?我们不应该在某处使用 sizeof(S) 吗?
  2. 如果使用 malloc 而不是 new,代码会是什么样子?下面的代码正确吗?
S** arr = (S**)malloc(5 * sizeof(S));
for (int i = 0; i < 5; ++i)
    arr[i] = (S*)malloc(5 * sizeof(S));
  1. 是的,这是正确的方法。不,不需要使用 sizeof(S)
  2. 您的代码不正确。通常,如果 struct S 具有非平凡可复制的成员,则不应使用 malloc,但如果 S 满足该条件,则您的代码应如下所示:
S** arr = (S**)malloc(5 * sizeof(S*));
for (int i = 0; i < 5; ++i)
    arr[i] = (S*)malloc(5 * sizeof(S));

但是在 C++ 中使用 malloc 被认为是不好的做法。如果可以的话,我会尝试使用 std::vector 重写它。 当然,如果使用 new/malloc

,请不要忘记使用 delete/free 清除内存