2

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

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

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

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

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


编辑:抱歉,我最初的帖子中有错字。现在更正了。这是有异常的代码。

4

1 回答 1

6

二维数组与指针数组不同

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

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

你会准备好你的第二个陈述。不要忘记

delete [] array;

编辑0:

呵呵,我应该知道 :) 对于评论中的问题:

我应该如何随后将数组传递给以 achar**作为参数的函数?

你没有。不是这种形式。如果您正在为某些 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 );
于 2011-03-22T21:24:31.280 回答