
30.03.2010, 16:38
|
|
Познающий
Регистрация: 04.04.2009
Сообщений: 58
С нами:
9001761
Репутация:
19
|
|
Здравствуйте, господа форумчане!
Вопрос по C, именно по библиотеке curl.
Напомню, что в C для того, чтобы записать результат работы сессии курла, нужно юзать специальную функцию(в php удобнее - есть RETURNTRANSFER, но мы не ищем легких путей). Функция есть, нормально пишет.
Если сайт-жертва делает редирект, то curl использует параметр
Код:
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, true);
для перехода по редиректу. Но пишет в итоговую переменную исходник НЕ той странички, на которую был редирект, а самой первой, на которой была ссылка с редиректом.
Собственно, как решить данный трабл?
Спасибо за помощь.
|
|
|

30.03.2010, 20:55
|
|
Познающий
Регистрация: 22.11.2009
Сообщений: 53
С нами:
8667664
Репутация:
0
|
|
всем привет.как на С++ реализовать следующее действие: передать одномерный массив,заданный через указатель, из одной функции в другую.спасибо.
|
|
|

31.03.2010, 08:47
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
С нами:
10021597
Репутация:
905
|
|
что-то типа
Код:
int func1 (int *array) {
...
}
int func2 (...) {
myvar = func1 (massiv)
}
где massiv - указатель на одномерный массив
|
|
|

01.04.2010, 20:30
|
|
Познающий
Регистрация: 03.01.2010
Сообщений: 42
С нами:
8606717
Репутация:
3
|
|
rudvil
int CurrentMemory=0;
int *pint = new int;
if ((CurrentMemory +=sizeof(pint)) >= 20480)
{
cout << "память заполнена";
delete pint;
}
else CurrentMemory +=sizeof(*pint);
строго не судите, но возможно так
Последний раз редактировалось SHiNiGaMi; 01.04.2010 в 20:41..
|
|
|

01.04.2010, 23:46
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
С нами:
9320830
Репутация:
86
|
|
Сообщение от SHiNiGaMi
rudvil
int CurrentMemory=0;
int *pint = new int;
if ((CurrentMemory +=sizeof(pint)) >= 20480)
{
cout << "память заполнена";
delete pint;
}
else CurrentMemory +=sizeof(*pint);
строго не судите, но возможно так
Спасибо конечно, но я пока-что остановился на этом
Код:
void* operator new (std::size_t size) {
/*
тут проверка - не превысется ли лимит... при malloc
*/
void* mem = std::malloc(size);
if (!mem)
ail::fatal_error("\n[ALLOCATING FAILED]\n");
return mem;
}
void operator delete (void* mem) {
std::free(mem);
}
void* operator new[] (std::size_t size) {
/*
тут проверка - не превысется ли лимит... при malloc
*/
void* mem = std::malloc(size);
if (!mem)
ail::fatal_error("\n[ALLOCATING FAILED]\n");
return mem;
}
void operator delete[] (void* mem) {
std::free(mem);
}
т.б. глобально перегрузил операторы.
Последний раз редактировалось rudvil; 01.04.2010 в 23:53..
|
|
|

02.04.2010, 18:46
|
|
Участник форума
Регистрация: 07.08.2008
Сообщений: 281
С нами:
9347610
Репутация:
165
|
|
Начал изучать C++, но возник вопрос при запуске программ под Ubuntu.
В книге приведены примеры для среды Windows.
Код:
#include <cstdio>
#include <cstdlib>
#include<iostream>
using namespace std;
int main(int nNumberofArgs, char* pszArgs[])
{
int celsius;
cout << "Введите температуру в грудасах Цельсия";
...
...
}
Какие нужно директивы подключать?
|
|
|

02.04.2010, 19:00
|
|
Участник форума
Регистрация: 18.07.2009
Сообщений: 272
С нами:
8850336
Репутация:
330
|
|
Никакие, компилируй в линуксе:
Код:
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////////
int main(int nNumberofArgs, char* pszArgs[])
{
int celsius;
cout << "Введите температуру в грудасах Цельсия";
...
...
}
//////////////////////////////////////////////////////////////////////////
Последний раз редактировалось Ins3t; 05.04.2010 в 20:24..
|
|
|

02.04.2010, 20:31
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
С нами:
9320830
Репутация:
86
|
|
Код:
void operator delete (void* mem) {
std::free(mem);
}
void operator delete[] (void* mem) {
std::free(mem);
}
Как можно узнать сколько байт в памяти занимает "mem"?
если это вообще реально...
Поясню, при выделении памяти с помощью
Код:
void* operator new (std::size_t size) {
usedMemory += size;
void* mem = std::malloc(size);
if (!mem)
ail::fatal_error("\n[ALLOCATING FAILED]\n");
return mem;
}
все просто - мы уже получаем размер выделяемой памяти, собственно хочется так же узнать сколько памяти удаляется при вызове delete или delete[], чтобы уменьшить счетчик используемой памяти...
|
|
|

09.04.2010, 23:21
|
|
Участник форума
Регистрация: 25.08.2008
Сообщений: 187
С нами:
9320830
Репутация:
86
|
|
Сообщение от rudvil
Код:
void operator delete (void* mem) {
std::free(mem);
}
void operator delete[] (void* mem) {
std::free(mem);
}
Как можно узнать сколько байт в памяти занимает "mem"?
если это вообще реально...
Поясню, при выделении памяти с помощью
Код:
void* operator new (std::size_t size) {
usedMemory += size;
void* mem = std::malloc(size);
if (!mem)
ail::fatal_error("\n[ALLOCATING FAILED]\n");
return mem;
}
все просто - мы уже получаем размер выделяемой памяти, собственно хочется так же узнать сколько памяти удаляется при вызове delete или delete[], чтобы уменьшить счетчик используемой памяти...
Мб пригодится
Код:
void* operator new (std::size_t size) {
if (currentMemory + size >= maxMemory)
fatal_error("REACHED MEMORY LIMIT, EXITING..");
currentMemory += size;
void* ptr = std::malloc(size + sizeof(std::size_t));
if (ptr == NULL)
fatal_error("new - MALLOC FAIL\n");
*(std::size_t*)ptr = size;
return ((std::size_t*)ptr) + 1;
}
void operator delete (void* ptr) {
std::size_t size = (*(((std::size_t*)ptr) - 1));
currentMemory -= size;
ptr = (void*)(((std::size_t*)ptr) - 1);
std::free(ptr);
}
void* operator new[] (std::size_t size) {
if (currentMemory + size >= maxMemory)
fatal_error("REACHED MEMORY LIMIT, EXITING..");
currentMemory += size;
void* ptr = std::malloc(size + sizeof(std::size_t));
if (ptr == NULL)
fatal_error("new[] - MALLOC FAIL\n");
*(std::size_t*)ptr = size;
return ((std::size_t*)ptr) + 1;
}
void operator delete[] (void* ptr) {
std::size_t size = (*(((std::size_t*)ptr) - 1));
currentMemory -= size;
ptr = (void*)(((std::size_t*)ptr) - 1);
std::free(ptr);
}
т.б. в выделяемый блок памяти добавляем сигнатуру, в которой хранится размер выделенного блока.
|
|
|

02.04.2010, 20:28
|
|
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
С нами:
9399214
Репутация:
52
|
|
возник вопрос... если я компилю проект с ключем
Код:
#pragma comment(linker, "/NODEFAULTLIB")
то естественно неработают такие функции как memcpy memcat memmove
чем их заменить и как работать тогда с памятью выделать перемещать копировать?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|