将内存分配给二维char数组,错误:从'void *'到'char **'的无效转换

时间:2011-12-07 09:13:05

标签: c++ pointers

错误:

x.cpp:641:39: error: invalid conversion from ‘void*’ to ‘char**’
x.cpp:644:39: error: invalid conversion from ‘void*’ to ‘char*’

代码:

int argc;
char **argv;

char **argvv;
argvv = malloc (argc * sizeof(char *));
for(int i = 0; i < argc; i++)
{
     argvv[i] = malloc(200 * sizeof(char));
}

argc argv 通过main()从命令行接收参数。

3 个答案:

答案 0 :(得分:3)

你写的是有效的C,但是C ++是无效的。

确保使用C编译器,并将文件命名为.c而不是.cpp(在某些情况下,GCC会从文件扩展名中推断语言)。

或编写C ++,并使用std::vector(或其他一些最适合您需要的容器类型)和std::string来删除内存分配技巧。

答案 1 :(得分:2)

int argc;
char **argv;

char **argvv;
argvv = new char*[argc];
for(int i = 0; i < argc; i++)
{
     argvv[i] = new char[200];
}

使用C ++的newdelete运算符。

稍后编辑:

同样删除(相当于C中的free):

for(int i = 0; i < argc; i++)
{
     delete [] argvv[i]; // mind the [] for array destruction
}

delete argvv;

答案 2 :(得分:-2)

malloc返回void*。您需要将它们转换为正确的类型,例如argvv = (char**)malloc(....