Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
#1

Указатели: выделить память размером n байт - C++

10.11.2011, 17:03. Просмотров 295. Ответов 8
Метки нет (Все метки)

Мне нужно выделить память размером n байт, но почемуто указатель на эту память всегда размером в 4 байта.

C++
1
2
3
4
5
6
char *a = new char[10];
std::cout << sizeof(a); // 4
char *a = (char*)malloc(10);
std::cout << sizeof(a); // 4
char *a;
std::cout << sizeof(a); // 4 oO
либо я не верно обращаюсь к указателям либо я даже не знаю как это понять.
Компилятор MinGW 4.4.1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2011, 17:03     Указатели: выделить память размером n байт
Посмотрите здесь:

Нужно выделить всю доступную процессу память блоками по 13 байт - C++
Нужно выделить всю доступную процессу память блоками по 13 байт. Использовать нужно две функции : malloc HeapAlloc При этом нужно...

Числа размером в 1 байт - C++
на моей машине fizeof ( int ) == 4 я хочу сохранить (дописать) в hex файл массив int Array как это можно сделать, если в Array...

Целочисленный тип размером в 1 байт - C++
не подскажите название такого типа? Просто смотрю в МСДН , там int- 4 байта. int16 -2 байта. А для 1 байта только char - но это...

Указатели и память - C++
Народ как указателю присвоить определённый адрес? P.S. Цитирую задание &quot;Пользуясь указателями выдать на печать адреса этих символов и...

Отображение файла в память, поиск и замена последовательности байт - C++
В общем, задача такая: спроецировать файл в память, найти последовательность байт, заменить её и записать изменения в файл. Вот, что я...

Указатели. Динамическая память. - C++
Нужно очень срочно. Сегодня последний день сдачи. 1. Дано натуральное число n. Определить количество цифр в цифровой записи данного...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.11.2011, 17:09     Указатели: выделить память размером n байт #2
OrmaJever, размер указателя всегда равен 4-м байтам, а следить за размером выделеной памяти обязаность программиста
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
10.11.2011, 17:29     Указатели: выделить память размером n байт #3
Указатель - это всего лишь объект, который содержит адрес.
sizeof(a) - это узнать размер объекта типа указатель, а не узнать размер выделенной памяти.
OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
10.11.2011, 17:32  [ТС]     Указатели: выделить память размером n байт #4
но у меняпочемуто не получается заполнить эту память
Вот хотел написать функцию substr но она возвращает пустой указатель.
C++
1
2
3
4
5
6
7
8
char *substr(const char *str, int start, int length) {
    char *res = (char*)malloc(length+1);
    for(int i=start;i < length; ++i) {
        *res++ = str[i];
    }
    *res = '\0';
    return res;
}
и так же попробовал просто в цыкле заполнить указатель значениями но место этого случайные символы из памяти
C++
1
2
3
4
5
6
7
    char *a = (char*)malloc(11);
    int i = 0;
    while(i < 10) {
        *a++ = i++;
    }
 
    std::cout << strlen(a) << std::endl << a;
длина 12 а в значении случайные символы из памяти
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.11.2011, 17:33     Указатели: выделить память размером n байт #5
Может вы спутали с тем, что для
char a[10];
sizeof(a);
будет возвращено 10 байт, несмотря на то, что имя массива a содержит адрес первого элемента массива. С указателями такое не пройдет.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.11.2011, 17:36     Указатели: выделить память размером n байт #6
Цитата Сообщение от OrmaJever Посмотреть сообщение
*res = '\0';
return res;
что написали, то и возвращает, а именно указатель на конец строки
C++
1
2
3
4
5
6
7
8
9
char *substr(const char *str, int start, int length) {
    char *res = (char*)malloc(length+1);
    char* begin = res;
    for(int i=start;i < length; ++i) {
        *res++ = str[i];
    }
    *res = '\0';
    return begin;
}
OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
10.11.2011, 17:40  [ТС]     Указатели: выделить память размером n байт #7
Цитата Сообщение от Chelioss Посмотреть сообщение
Указатель - это всего лишь объект, который содержит адрес.
sizeof(a) - это узнать размер объекта типа указатель, а не узнать размер выделенной памяти.
C++
1
2
3
4
5
6
// (1)
char *str = "string";
std::cout << strlen(str) << " " << str << std::endl;
// (2)
char *aa = new char[10];
std::cout << strlen(aa) << " " << aa;
вот смотрите оба указателя но первыйвыводит правельно 6 string, а второй 3 [абракадабра]. Почему так?
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.11.2011, 17:42     Указатели: выделить память размером n байт #8
strlen() - длина строки
Во втором случае строка неопределена, там мусор, вот и получается так.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2011, 17:44     Указатели: выделить память размером n байт
Еще ссылки по теме:

Указатели и динамическая память - C++
Здравствуйте. Почему размер памяти для указателя выделяется такой же как для объекта в куче. Например: int * pVar = new int;Как я понял,...

Указатели. Динамическая память в С++ - C++
Найти наибольшую и наименьшую цифры в записи данного натурального числа. У меня есть код на Паскале. Помогите переделать на С++.И...

Указатели и динамическая память - C++
Не могу немного понять, допустим, я хочу создать массив, зачем мне под него выделять память, почему нельзя создать указатель,...

Указатели.Динамическая память. - C++
Перепешите пожалуйста на С/С++! &lt;script&gt; var n = new Number(); var m = new Number(); n = parseInt(prompt(&quot;n=&quot;, &quot;5&quot;)); m =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
10.11.2011, 17:44  [ТС]     Указатели: выделить память размером n байт #9
Jupiter, ну прям огромное спасибо. Сам бы не додумался
Yandex
Объявления
10.11.2011, 17:44     Указатели: выделить память размером n байт
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru