Влияет ли версия gcc на такие функции, как malloc? - PullRequest
0 голосов
/ 22 июля 2011

Я пытаюсь открыть проект, который был разработан с использованием версии, которую я не знаю.GCC 4.4 уже установлен на моем Red Hat Linux.это дает несколько ошибок.один из которых находится в функции malloc ... он говорит "недопустимые аргументы. кандидаты void * malloc (?)" .. пока я передаю целочисленную переменную в эту функцию "malloc (size)" .. может помочь любоймне в чем проблема ..

умайр

Ответы [ 4 ]

5 голосов
/ 22 июля 2011

Вы должны предпочитать использовать операторы C ++ "new" и "delete" вместо malloc. malloc возвращает 0 в случае ошибки, new создает исключение (которое я считаю «хорошим» подходом)

http://www2.research.att.com/~bs/bs_faq2.html#malloc

В противном случае, прототип для malloc:

void * malloc (размер size_t);

Итак, чтобы выделить int, вы бы:

int * my_int = (int *) malloc (sizeof (int));

Причина, по которой вам нужно привести через "(int *)" результат "malloc", заключается в том, что malloc возвращает void *. C ++ не разрешит присваивать void * int *. Вы можете использовать C ++ static_cast вместо C cast, если хотите.

0 голосов
/ 22 июля 2011

у вас где-то есть синтаксическая ошибка. пожалуйста, дайте нам точный номер строки. это не проблема с malloc, компилятор думает, что вы пытаетесь передать malloc чему-то.

0 голосов
/ 22 июля 2011

Версия gcc не должна иметь никакого значения в том, как работает malloc.Более новые версии могут быть более педантичными.

Это, вероятно, потому, что возвращаемое значение - void *, а вы используете указатель char *.Вы, вероятно, можете использовать приведение:

char* p;
p = (char*) malloc( n );
0 голосов
/ 22 июля 2011

Вам нужно привести функцию malloc при использовании ее в c ++.Поскольку он возвращает void * по умолчанию.

char* chars ;
chars = (char*) malloc(10*sizeof(char));
          ^
          |

Также для gcc это для c, а g ++ используется для c ++, но я думаю, это не имеет большого значения.

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