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

时间:2014-03-24 21:06:37

标签: c arrays dynamic-allocation

我正在尝试使用以下代码分配要访问的{2}字符数组:

ary[i][j]

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

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

2 个答案:

答案 0 :(得分: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个字符。

答案 1 :(得分:3)

我想将以下内容添加到cmaster的答案中。

而不是

*vals = (char**) calloc( sizeof( char** ), valscount );

使用

*vals = (char**) calloc( sizeof( char* ), valscount );

而不是

    (*vals)[i] = (char*) calloc( sizeof(char*), stringmaxlen );

使用

    (*vals)[i] = (char*) calloc( sizeof(char), stringmaxlen );

在第一种情况下,分配的内存大小不会发生变化,因为sizeof(char**)sizeof(char*)相同。然而,第二种情况并非如此。 sizeof(char)为1而sizeof(char*)更大 - 32位硬件为4,64位硬件为8。

更重要的是,它澄清了意图 - 你想为stringmaxlen字符分配内存,而不是stringmaxlen指向字符的指针。

相关问题