0

不确定我的语法是否正确;我的代码正在运行,只是想通过任何想要评论以帮助改进它的人运行它。我假设分配 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;
    }
4

2 回答 2

1

TCHAR * 是一个指针,为什么你不能只做 TCHAR * sName[20480]?

于 2013-03-27T16:06:27.403 回答
0

静态分配很好,但它不是最有效的内存。将来您可能需要考虑将 **sKeys 分配为 sArray 数组,其中 dwStringsFound 是该数组的大小。如果您在程序中的某个点调用深度递归函数,您当前的方法会遇到问题,您可能会用完堆栈内存。请记住,堆内存总是比堆栈内存多。如果你不打算在整个程序中使用某些东西,它可能应该被 malloc'ed 和释放。如果它只是静态分配的,那么它只是在使用它之后浪费空间。

于 2013-03-27T16:06:47.633 回答