Странные ошибки в Visual C ++ :: 'malloc': функция не принимает 1 аргумент - PullRequest
0 голосов
/ 30 апреля 2010
Error 38 error C2660: 'malloc' : function does not take 1 arguments C:\VolumeRenderer\render.cpp 296 1 VolumeRenderer
Error 39 error C2660: 'malloc' : function does not take 1 arguments C:\VolumeRenderer\render.cpp 412 1 VolumeRenderer
Error 40 error C2660: 'malloc' : function does not take 1 arguments C:\VolumeRenderer\render.cpp 414 1 VolumeRenderer
Error 41 error C2660: 'read_den' : function does not take 4 arguments C:\VolumeRenderer\render.cpp 506 1 VolumeRenderer

Мои все malloc разделы выглядят так:

/* allocate space for the raw data */
density_size = BRAIN_XLEN * BRAIN_YLEN * BRAIN_ZLEN;
density = (unsigned char*)malloc(density_size);
if (density == NULL) {
  fprintf(stderr, "out of memory\n");
  exit(1);
}

относительно read_den (последняя ошибка).read_den принимает 4 параметра.Вы можете увидеть прототип функции и соответствующий вызов здесь:

  unsigned char *read_den(char *filename,int *xptr,int *yptr,int *zptr)// function prototype
  src_volume = read_den(src_file, &src_xlen, &src_ylen, &src_zlen);// function call

Это мой код или ошибки, которые абсурдны.Как их исправить?

РЕДАКТИРОВАТЬ: Может ли кто-нибудь прокомментировать последнюю ошибку, потому что.Я не могу это оправдать.

EDIT2: Когда я изменил расширение файла с * .cpp на * .c, все ошибки исчезли.Поэтому я думаю, что это как-то связано с C & C ++.

Ответы [ 3 ]

3 голосов
/ 30 апреля 2010

Дикая догадка: вы неправильно использовали malloc где-то еще, передавая два аргумента вместо одного. Это приведет к неявному объявлению.

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


Обновление: вы также можете поместить #include <stlib.h> в качестве первой строки в вашем исходном файле, чтобы любое потенциальное неявное объявление было помечено как ошибка.

1 голос
/ 30 апреля 2010

Возможно, вы скрываете настоящую функцию malloc где-то в вашем коде. В gcc вы можете использовать флаг -Wshadow для тестирования. Я уверен, что в Visual Studio есть что-то похожее.

Редактировать: я прочитал вторую часть, которую вы добавили, и, похоже, ошибки действительно связаны с несовместимостью между C и C ++. В зависимости от размера вашего проекта, это может быть утомительной работой, чтобы разобраться. Я предлагаю вам использовать ключевое слово "extern", чтобы связать ваш новый код C ++ с вашим рабочим кодом C.

Пример:

#include <stdio.h>
#include <stdlib.h>

int cplusplus_function(int a); 

main(){
    printf("c code\n");

    int* a = malloc(sizeof(int)); //just proving that this is indeed C code.
                                  //this would not compile with a C++ compiler

    cplusplus_function(5);
    return 0;
}

и функция C ++ с ключевым словом "extern":

#include <iostream>

extern "C" void cplusplus_function(int);

void cplusplus_function(int a){
    std::cout << "c++ code" << std::endl;
}

Теперь вы можете скомпилировать файлы отдельно и связать их вместе.

0 голосов
/ 30 апреля 2010
  1. У вас есть #include <stdlib.h>?
  2. Попробуйте сгенерировать предварительно обработанный вывод (в MSVC это делается с помощью опции /E). Просмотрите полученный результат для объявлений malloc и read_den.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...