我有一个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}};
答案 0 :(得分:1)
该代码非常安全。 malloc()
和free()
仅关注从堆中分配多个字节。这就是您在sizeof()
调用中使用malloc()
来确定数据类型所需的字节数的原因。例如,您也可以执行S = malloc(sizeof(DWORD) * 4 * 256)
并获得相同的结果。
要回答问题的后半部分,这些数组都不会对堆栈太大。您可以使用C或C ++进行堆栈分配。