0

我有一个 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}};
4

1 回答 1

1

该代码是完全安全的。malloc()并且free()只关心从堆中分配一些字节。这就是为什么您sizeof()在调用内部使用malloc(), 来确定数据类型需要的字节数。例如,您也可以执行S = malloc(sizeof(DWORD) * 4 * 256)并获得相同的结果。

要回答您问题的后半部分,这些数组对于堆栈来说都不是太大。您可以在 C 或 C++ 中堆栈分配它们。

于 2013-10-18T21:48:25.953 回答