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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Количество выделяемо памяти 
:(
    Опции темы
SneG0K
Дата 7.5.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


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

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



Код

#include "stdafx.h"
#include "malloc.h"
#include "stdio.h"

int _tmain(int argc, _TCHAR* argv[])
{
    int i;
    scanf("%d", &i);
    int *p = (int*)malloc(i*sizeof(double));
    if (p == NULL) { 
        puts("No memory");
    } else {
        puts("Ok");
    }
    scanf("%d", &i);
    return 0;
}



Небольшой код, немножко усовершенствованный с примера в книжке...
У меня 2 гб физической памяти и своп 1 гб...
Ввожу числа - выделяет память... До двух гиг выделило... А вот тут незадача, если памяти уже нет, то винда попросту грохает мое приложение... 
Где-то видел подобную тему, только для *nix
Что с этим делать? В книжке написано, что если память выделится не может, то возвращается NULL... А оно просто умирает

Это сообщение отредактировал(а) SneG0K - 7.5.2009, 13:34
PM WWW Skype   Вверх
azesmcar
Дата 7.5.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 52
Всего: 211



SneG0K

В книге написано что
Цитата(SneG0K @  7.5.2009,  13:33 Найти цитируемый пост)
что если память выделится не может, то возвращается NULL

но это книга по С++, а что сделает виндоуз если вдруг какое нибудь приложение начнет жрать всю память - книги по С++ об этом умалчивают smile 

А можно подробнее? что именно происходит?
PM   Вверх
SneG0K
Дата 7.5.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


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

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



Цитата(azesmcar @  7.5.2009,  13:42 Найти цитируемый пост)

А можно подробнее? что именно происходит? 

Вываливается эксепшн... 
Цитата(azesmcar @  7.5.2009,  13:42 Найти цитируемый пост)
приложение начнет жрать всю память

По идее, на сколько я понял, то перед тем как дать указатель на область памяти, винда проверяет, а есть ли такое кол-во памяти... И если есть, то дает указатель, нет - фтопку...

Добавлено через 2 минуты и 24 секунды
Еще вопросик, у меня нет библиотеки iostream... Мож кто скинет... Походу VS 2008 обрезанная

Добавлено через 4 минуты и 39 секунд
Нет только заголовочного файла iostream.h
PM WWW Skype   Вверх
azesmcar
Дата 7.5.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 52
Всего: 211



Цитата(SneG0K @  7.5.2009,  14:56 Найти цитируемый пост)
Нет только заголовочного файла iostream.h 

это нормально smile 
#include <iostream>
варианты с .h оставлены для поддержки старых кодов, в некоторых компиляторах их может и не быть

Насчет малока,
http://bytes.com/groups/c/636794-malloc


Это сообщение отредактировал(а) azesmcar - 7.5.2009, 15:16
PM   Вверх
SneG0K
Дата 7.5.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


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

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



Цитата(azesmcar @  7.5.2009,  14:04 Найти цитируемый пост)

Насчет малока,
http://bytes.com/groups/c/636794-malloc

Хорошо, там написано, что малок, алок, реалок и т.д. использовались в С, я это знал... 
Вот если выделять память через нью, то дебадная версия сборки выкидывает ошибку, с окошком от VS, а нормальная сборка возвращает NULL, а с малоком программу просто вырубает... 

Цитата(azesmcar @  7.5.2009,  14:04 Найти цитируемый пост)
это нормально smile 
#include <iostream>
варианты с .h оставлены для поддержки старых кодов, в некоторых компиляторах их может и не быть

Спасибо...
PM WWW Skype   Вверх
azesmcar
Дата 7.5.2009, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 52
Всего: 211



SneG0K

вот этот код как работает?
Код

int main()
{
    void* v = 0;
    do 
    {
        v = malloc(999999999);
        std::cout << "poka eshe ne vse..." << std::endl;
    } while (v != 0);
    std::cout << "vot i vse" << std::endl;
}


PM   Вверх
SneG0K
Дата 7.5.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


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

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



azesmcar, Да, так работает...
А что это за тип void?
PM WWW Skype   Вверх
mrbrooks
Дата 7.5.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

Репутация: 19
Всего: 306



Цитата(SneG0K @  7.5.2009,  15:59 Найти цитируемый пост)
А что это за тип void?

void - тип, указывающий на отсутствие какого-либо значения. может использоваться в объявлении указателей на любой тип. в Дельфи такого нет  smile

Добавлено через 3 минуты и 2 секунды
так же используется как возвращаемое значение, при условии что функция ни чего не возвращает. аналог процедур в Дельфи.
Еще в сигнатурах функций - если нет параметров (необязательно).
PM MAIL   Вверх
azesmcar
Дата 7.5.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 52
Всего: 211



Цитата(SneG0K @  7.5.2009,  15:59 Найти цитируемый пост)
А что это за тип void? 

это типо нет типа smile 

можно хранить только указатели на void. В Си в void* можно хранить указатель на любой обьект (кроме битовых полей и обьектов обявленных как register).

Цитата(С99)

A “pointer to void,” void*, is a generic pointer capable of pointing to any object (except for
bit-fields and objects declared with the register storage class and functions) without loss of
information. A pointer to void must have the same representation and alignment as a pointer to
char; the intent of this rule is to allow existing programs that call library functions such as
10 memcpy and free to continue to work.


А в С++ его вообще не стоит использовать, там есть шаблоны smile 
PM   Вверх
mrbrooks
Дата 7.5.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

Репутация: 19
Всего: 306



Цитата(azesmcar @  7.5.2009,  16:12 Найти цитируемый пост)
А в С++ его вообще не стоит использовать, там есть шаблоны smile

хотел дописать  smile 
PM MAIL   Вверх
SneG0K
Дата 7.5.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


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

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



Цитата(mrbrooks @  7.5.2009,  15:08 Найти цитируемый пост)
может использоваться в объявлении указателей на любой тип. в Дельфи такого нет

Там есть variant smile 

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

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

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

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

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


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

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


 




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


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

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