多维数组作为平面数组问题

时间:2011-03-22 21:20:27

标签: c++ brew-framework

我正在查看有人编写的两行代码,第二行有一个例外,但我不明白为什么。

char** array = (char**) new char [2] [6];

std_strlprintf(array[0],6,"[%d]", num);

std_strlprintf是一个Brew函数,它将格式化输出写入字符串。 (num是一个0的整数值)

为什么这段代码有异常,以buff [0]的形式访问数组的第一个元素有什么问题?


编辑:抱歉,我的帖子中有一个拼写错误。现在纠正了。 这是有例外的代码。

1 个答案:

答案 0 :(得分:6)

二维数组与指针数组不同。

您的第一个语句创建两个六个字符的数组,每个作为单个内存块。将该语句替换为:

char (*array)[6] = new char [2][6];

你将完成你的第二个陈述。别忘了

delete [] array;

编辑0:

嗯,我应该知道:)在评论中提出你的问题:

  

我应该如何随后传递数组   以char**为例的函数   参数β

你没有。不是这种形式。如果要为某些C API(如execve(2))构建参数列表,则必须完全采用两阶段初始化:

// prototype of the function to call
void my_fancy_func( int argc, char* const argv[] );

char** my_argv = new char*[my_argc];

for ( i = 0; i < my_argc; i++ ) {
    my_argv[i] = new char[arg_buffer_size];
    snprintf( my_argv[i], arg_buffer_size, "%d", i );
}

my_fancy_func( my_argc, my_argv );