我正试图通过另一个函数分配一个字符串数组。我基本上可以做到这一点,但当我在另一个函数中尝试(添加另一个级别的指向)时,我被卡住了。
这是代码:
int main() {
char** book;
FillBook( &book );
...
...
}
现在我试图为3个字母的5个字符串分配内存,并填充它们,但我被卡住了(程序执行停止):
void FillBook( char*** book_pt ) {
*book_pt = malloc( 5 * sizeof( char* ) ); //this is where I make space for 5 strings
*book_pt[0] = malloc( 5 * sizeof( char ) ); //this one works
strcpy(*book_pt[0], "ok");
*book_pt[1] = malloc( 5 * sizeof( char ) ); //this one doesn't and the execution stops here
strcpy(*book_pt[1], "no");
return;
}
我试图在*book_pt[0]之后分配的每个指针都会产生相同的效果。它也使用strdup做同样的事情。
添加行:
(*book_pt == NULL)
在第一个malloc显示它没有返回NULL值之后。
使用变量char*** book_pt
的表达式缺少更改优先级的括号。
例如:
*book_pt[1]
应该是:
(*book_pt)[1]
没有括号[]运算符优先于*运算符,但需要先取消引用book_pt
。
您的*book_pt[0]
恰好工作,但这只是因为book_pt[0]
和*book_pt
相同。但当索引i
为0以外的任何值时,*book_pt[i]
与(*book_pt)[i]
的不同。