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.嗯.
我想知道这里有什么问题以及如何解决这个问题,谢谢.
您的运算符优先级错误:*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字符.