假设我们有一个简单的结构体
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];
我的问题是:
- 这是一个正确的方式来动态分配一个内存为这个数组使用
new
?我们不应该在某处使用sizeof(S)
吗? - 如果使用
malloc
而不是new
,代码会是什么样子?下面的代码正确吗?
S** arr = (S**)malloc(5 * sizeof(S));
for (int i = 0; i < 5; ++i)
arr[i] = (S*)malloc(5 * sizeof(S));
- 是的,这是正确的方式。不,没有必要使用
sizeof(S)
你的代码不正确。一般来说,如果
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
的内存