c:动态分配2d char数组时出现问题?

use*_*200 3 c arrays dynamic-allocation

我正在尝试ary[i][j]使用以下代码分配要访问的2D字符数组:

#define stringmaxlen 20

void do_alloc( char ***vals, int valscount ){
    *vals = (char**) calloc( sizeof( char** ), valscount );
    int i = 0;
    for ( ; i<valscount; i++ )
        *vals[i] = (char*) calloc( sizeof( char* ), stringmaxlen );
}

int main( ){
    //......
    char** ary;
    do_alloc( &ary, 10 );
    strcpy( ary[0], "test" );
    //......
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这导致某处出现溢出并且程序执行中存在错误,我从这里获得了一些动态分配的引用:http://staff.science.nus.edu.sg/~phywjs/CZ1102/lecture20/sld014.嗯.

我想知道这里有什么问题以及如何解决这个问题,谢谢.

cma*_*ter 7

您的运算符优先级错误:*vals[i]评估为*(vals[i]),而不是(*vals)[i].有关详细信息,请参见http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence.

修复是*vals[i]改为(*vals)[i].

而且,分配*vals[i] = (char*) calloc( sizeof( char* ), stringmaxlen );是错误的.它分配了太多的内存,因为它为stringmaxlen 指针分配空间,但你只需要stringmaxlen字符.