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

Fru*_*ose 2 c++ brew-framework

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

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

std_strlprintf(array[0],6,"[%d]", num);
Run Code Online (Sandbox Code Playgroud)

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

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


编辑:抱歉我的帖子中有一个错字.现在纠正了.这是具有异常的代码.

Nik*_*sov 6

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

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

char (*array)[6] = new char [2][6];
Run Code Online (Sandbox Code Playgroud)

并且你将完成你的第二个陈述.别忘了

delete [] array;
Run Code Online (Sandbox Code Playgroud)

编辑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 );
Run Code Online (Sandbox Code Playgroud)