Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241

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

10.11.2011, 17:03. Показов 2243. Ответов 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
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2011, 17:03
Ответы с готовыми решениями:

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

Для целого числа А выделить старший байт и поставить его на место младшего байта. старший байт при этом обнулить.
Помогите пожалуйста, вообще не могу понять как делать следующее...Еще и в программе CODE BLOCKS препод почему именно эту программу...

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

8
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
10.11.2011, 17:09
OrmaJever, размер указателя всегда равен 4-м байтам, а следить за размером выделеной памяти обязаность программиста
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
10.11.2011, 17:29
Указатель - это всего лишь объект, который содержит адрес.
sizeof(a) - это узнать размер объекта типа указатель, а не узнать размер выделенной памяти.
0
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
10.11.2011, 17:32  [ТС]
но у меняпочемуто не получается заполнить эту память
Вот хотел написать функцию 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 а в значении случайные символы из памяти
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.11.2011, 17:33
Может вы спутали с тем, что для
char a[10];
sizeof(a);
будет возвращено 10 байт, несмотря на то, что имя массива a содержит адрес первого элемента массива. С указателями такое не пройдет.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
10.11.2011, 17:36
Цитата Сообщение от 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;
}
1
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
10.11.2011, 17:40  [ТС]
Цитата Сообщение от 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 [абракадабра]. Почему так?
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
10.11.2011, 17:42
strlen() - длина строки
Во втором случае строка неопределена, там мусор, вот и получается так.
1
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
10.11.2011, 17:44  [ТС]
Jupiter, ну прям огромное спасибо. Сам бы не додумался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.11.2011, 17:44
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru