我的C结构和内存分配是否正确?

时间:2013-03-27 15:53:45

标签: struct dynamic-allocation calloc

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

2 个答案:

答案 0 :(得分:1)

TCHAR *是一个指针,所以为什么你不能只做TCHAR * sNake [20480p>

答案 1 :(得分:0)

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