动态分配2d数组中使用的用户定义类型



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

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

现在我们要创建一个指针数组(2d array 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的内存

最新更新