不确定我是否有正确的语法;我的代码正在运行,只是希望将其运行到任何想要评论以帮助改进它的人。我假设分配20480不消耗任何空间,因为它只是一个指针数组?所以我可以去任何大于dwStringsFound的数字吗?
struct sArray {
TCHAR *sName;
}*sKeys[20480];
// get dwStringsFound...
[...]
// allocate the space
for (DWORD i=0;i<dwStringsFound;i++) sKeys[i] = (sArray *) calloc(1,sizeof(sArray));
for (DWORD i=0;i<dwStringsFound;i++) sKeys[i]->sName = tcalloc(1024);
// Do work...
[...]
// Free resources.
for (DWORD i=0;i<dwStringsFound;i++) {
free(sKeys[i]->sName);sKeys[i]->sName=NULL;
free(sKeys[i]);sKeys[i]=NULL;
}
答案 0 :(得分:1)
TCHAR *是一个指针,所以为什么你不能只做TCHAR * sNake [20480p>
答案 1 :(得分:0)
静态分配很好,但它不是最有效的内存。在将来,您可能需要考虑将** sKeys分配为sArray数组,其中dwStringsFound是此数组的大小。如果你在程序中的某个时刻调用了一个深度递归函数,那么你在当前方法遇到麻烦的地方就可能会耗尽堆栈内存。请记住,堆内存总是比堆内存多。如果你不打算在整个程序中使用某些东西,它应该是malloc'ed并释放。如果它只是静态分配,它只是在它超出它的实用性之后浪费空间。