动态分配的二维数组中使用的用户定义类型
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];
我的问题是:
- 使用
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
清除内存
假设我们有一个简单的结构
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];
我的问题是:
- 使用
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
清除内存