将分配/解除分配多维数组从 C++ 转换为 C
Convert allocating/deallocating multidimensional arrays from C++ to C
我有一个C++代码...
// global
DWORD* P;
DWORD (*S)[256];
// then later allocate memory
P = new DWORD[18];
S = new DWORD[4][256];
// later on, free memory
delete P;
delete [] S;
我想转换为 C。我试过了。。
/* global */
DWORD* P;
DWORD (*S)[256];
/* allocate */
P = malloc(sizeof(DWORD[18]));
S = malloc(sizeof(DWORD[4][256]));
/* free */
free(P);
free(S);
它可以工作,我没有从编译器 (GCC) 收到任何错误或警告,但我不确定这是否是正确的方法,我猜它会泄漏内存,可能是在释放多维数组时。
另外,这些数组是否太大而无法在堆栈上分配?我可以这样做而忘记malloc/free吗?
DWORD P[18] = {0};
DWORD S[4][256] = {{0}};
该代码是完全安全的。 malloc()
和free()
只关心从堆中分配多个字节。这就是为什么在调用 malloc()
中使用 sizeof()
来确定数据类型所需的字节数的原因。例如,您也可以执行S = malloc(sizeof(DWORD) * 4 * 256)
并获得相同的结果。
为了回答问题的后半部分,这两个数组对于堆栈来说都不是太大的。您可以在 C 或 C++ 中堆叠分配它们。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++