Выделение памяти для двумерного массива char, ошибка: неверное преобразование из 'void *' в 'char **' - PullRequest
0 голосов
/ 07 декабря 2011

Ошибка:

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 ]

3 голосов
/ 07 декабря 2011

То, что вы написали, является допустимым C, но недействительным C ++.

Убедитесь, что вы используете компилятор C и назовите ваши файлы .c вместо .cpp (GCC будет выводить язык из расширений файлов в некоторыхслучаи).

Или напишите C ++ и используйте std::vector (или какой-либо другой тип контейнера, наиболее подходящий для ваших нужд) и std::string для устранения сложности выделения памяти.

2 голосов
/ 07 декабря 2011
int argc;
char **argv;

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

Используйте операторы C ++ new и delete.

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ:

Также удаление (эквивалент free в C):

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

delete argvv;
0 голосов
/ 07 декабря 2011

malloc возвращает void*.Вам необходимо привести их к правильному типу, например argvv = (char**)malloc(.....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...