将分配/解除分配多维数组从 C++ 转换为 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++ 中堆叠分配它们。

最新更新