提问人:Michal 提问时间:10/26/2021 更新时间:10/26/2021 访问量:110
动态分配的二维数组中使用的用户定义类型
User defined type used in dynamic allocated 2d array
问:
假设我们有一个简单的结构
struct S {
int a;
int b;
int c;
}
现在我们要创建一个指针数组(2d 数组 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));
答:
4赞
Deumaudit
10/26/2021
#1
- 是的,这是正确的方法。不,没有必要使用
sizeof(S)
- 您的代码不正确。通常,如果具有非平凡的可复制成员,则不应使用 if,但如果 S 满足该要求,则代码应如下所示:
malloc
struct 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
重写它。
当然,不要忘记清除内存 / 以防使用delete
free
new
/malloc
评论
0赞
PaulMcKenzie
10/26/2021
你真的应该提到,如果更改为具有非平凡的可复制成员,代码就会被破坏。malloc
S
评论
S
malloc
std::vector<std::vector<S>>
new
malloc
malloc
struct S { std::string str; };
std::string
std::string
malloc