Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> calloc, почему так нельзя писать? 
:(
    Опции темы
Kakadu
Дата 15.8.2008, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



Код

#include <windows.h>
#include <string.h>
#include <malloc.h>

class TYamatoPlugin
{
  public:
    int *pp;     
    TYamatoPlugin();
    ~TYamatoPlugin();
};

TYamatoPlugin::TYamatoPlugin()
{
    pp = (int *)calloc( 100, sizeof( int ) );

}
TYamatoPlugin::~TYamatoPlugin()
{
    free(pp);
}


ругается линкер
   Creating library yamato.lib and object yamato.exp
yamato.obj : error LNK2019: unresolved external symbol _calloc referenced in function "public: __thiscall TYamatoPlugin::TYamatoPlugin(void)" (??0TYamatoPlugin@@QAE@XZ)
yamato.obj : error LNK2019: unresolved external symbol _free referenced in function "public: __thiscall TYamatoPlugin::~TYamatoPlugin(void)" (??1TYamatoPlugin@@QAE@XZ)
yamato.dll : fatal error LNK1120: 2 unresolved externals

у меня настройки линкера хреново сделаны или как?


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
Cycle
  Дата 15.8.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 1.12.2007

Репутация: нет
Всего: 3



Проверять код лениво было, но в MSDN прочитал, что надо поключить NEWMODE.OBJ в опциях линкера.
PM MAIL   Вверх
ama_kid
Дата 15.8.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: нет
Всего: 95



Сам не проверял, но предполагаю, что следует прислушаться к МСДН:
Цитата(http://msdn.microsoft.com/en-us/library/3f8w183e.aspx)
Routine                        Required header
calloc                   <stdlib.h> and <malloc.h>



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
pycha
Дата 16.8.2008, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


главный анастазиолог
*


Профиль
Группа: Участник
Сообщений: 239
Регистрация: 20.6.2008
Где: Украина

Репутация: 1
Всего: 13



Вообще такие ошибки возникают когда функция обьявлена , но нет ее реализации. Скорее всего неподключон файл с реализацией.
--------------------
ищу хакера со знанием компьютера длятехкт
PM MAIL ICQ   Вверх
Kakadu
Дата 16.8.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



Код

//в yamato.cpp есть include этого файла yclass.h
#include <fstream>
#include <list>
#include <stdlib.h>
#include <malloc.h>
#include <new.h>
using namespace std;
class TYamatoPlugin
{
  public:
    int *pp;     
    TYamatoPlugin();
    ~TYamatoPlugin();
};
TYamatoPlugin::TYamatoPlugin()
{
    _set_new_mode(1);
    pp = (int*)calloc(100, sizeof(int) );

}
TYamatoPlugin::~TYamatoPlugin()
{
    free(pp);



Почитал msdn - говорят вместо подключения newmode.obj можно писать _set_new_mode(1);. Как подключать не понял, туплю. На всякий случай думаю стоит выложить батник компиляции:
Код

cl /Zp2 /O1igy /GF /Gr /GR- /GX- /LD /Gs10000 yamato.cpp /link /subsystem:console /machine:I386 /opt:nowin98 /noentry /nodefaultlib /def:yamato.vc.def kernel32.lib advapi32.lib user32.lib /map:yamato.map /merge:.rdata=.text

не компилится. ругается.
Код

   Creating library yamato.lib and object yamato.exp
yamato.obj : error LNK2019: unresolved external symbol _calloc referenced in function "public: __thiscall TYamatoPlugin::TYamatoPlugin(void)" (??0TYamatoPlugin@@QAE@XZ)
yamato.obj : error LNK2019: unresolved external symbol "int __cdecl _set_new_mode(int)" (?_set_new_mode@@YAHH@Z) referenced in function "public: __thiscall TYamatoPlugin::TYamatoPlugin(void)" (??0TYamatoPlugin@@QAE@XZ)
yamato.obj : error LNK2019: unresolved external symbol _free referenced in function "public: __thiscall TYamatoPlugin::~TYamatoPlugin(void)" (??1TYamatoPlugin@@QAE@XZ)
yamato.obj : error LNK2019: unresolved external symbol _atexit referenced in function "void __cdecl `dynamic initializer for 'YamatoPlugin''(void)" (??__EYamatoPlugin@@YAXXZ)
yamato.dll : fatal error LNK1120: 4 unresolved externals


З.Ы. Кто знает, где по-русски можно прочитать о разнице между new, mslloc, calloc и прочая...


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
Annihilator
Дата 17.8.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

Репутация: 1
Всего: 3



Цитата(Kakadu @  16.8.2008,  14:59 Найти цитируемый пост)
где по-русски можно прочитать о разнице

А чем английский плох. По-моему ничего лишнего... На крайняк просто примеры посмотри, если не сможешь перевести

calloc
malloc
free

И все остальное...



--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
Kakadu
Дата 20.8.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



Народ, я так и не победил эту проблему с линкованием!  smile 
Код

call VCVARS32.BAT
set INCLUDE=%INCLUDE%;..\common
set
if exist yamato.dll del yamato.dll>nul
cl /w /Zp2 /Od /GF /Gr /GR- /GX- /LD /Gs10000 yamato.cpp /link /VERBOSE newmode.obj /subsystem:console /machine:I386 /opt:nowin98 /noentry /nodefaultlib /def:yamato.vc.def kernel32.lib advapi32.lib user32.lib /map:yamato.map /merge:.rdata=.text

Это был батник сборки, а теперь исходник
Код

#include <string.h>
#include <malloc.h>
void ttt() {
    int *pp = (int *)malloc( sizeof( int ) );
    free(pp);
}

Получаю такое сообщение:
Код

yamato.obj : error LNK2019: unresolved external symbol _free referenced in function "void __fastcall ttt(void)" (?ttt@@YIXXZ)
yamato.obj : error LNK2019: unresolved external symbol _malloc referenced in function "void __fastcall ttt(void)" (?ttt@@YIXXZ)

в MSDN ничего умного не нашел, может плохо смотрел.... параметры линкера вроде не конфликтуют друг с другом... ничего не понимаю....  smile 


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
Rififi
Дата 20.8.2008, 19:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



Kakadu
- кто дал тебе этот список опций?
- ты в курсе, что делает nodefaultlib?

параметры линкера вроде не конфликтуют друг с другом...
Цитата
If you use /NODEFAULTLIB, for example, to build your program without the C run-time library, you may have to also use /ENTRY to specify the entry point (function) in your program. For more information, see C Run-Time Libraries.

© msdn

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1003 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.