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

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

Войти
Регистрация
Восстановить пароль
 
TheSteelRat
0 / 0 / 0
Регистрация: 25.06.2010
Сообщений: 36
#1

Выделение памяти под укзатель переданный функции - C++

25.06.2010, 18:09. Просмотров 400. Ответов 3
Метки нет (Все метки)

Доброго времени суток, форумчане!

Вот коды нужных файлов:
C++
1
2
3
4
5
//main.cpp
#include "func.h"
char *name;
char *p;
get_stream_string (&p, &name);
C++
1
2
3
//func.h
extern int get_stream_dword (char **p, DWORD *len);
extern int get_stream_string (char **p, char **var);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//func.cpp
#include "func.h"
int get_stream_dword (char **p, DWORD *len)
//функция для получения длинны строки, которая хранится в первых четырёх битах начала потока.
{
    *len = *((DWORD*)*p);
    *p+=4;
    return 1;
}
int get_stream_string (char **p, char **var)
//функция получения строки, исходя из её длинны в потоке. p - поток, содержащий в 
//первых 4-ёх байтах длинну строки(n), а в последующих n байтах саму строку
{
    DWORD n;
        //получаем длинну строки
    get_stream_dword (p, &n);
    
        if (var)
    {
                        //выделяем память под строку найденной длинны n         
                        *var = new char[n+1];
            memcpy(*var, *p, n);
            *var[n] = 0;
    }
    *p+=n;
    return 1;
}
Задача такова: сделать так, чтоб из указателя name можно было извлеч строку.
Проблема в том, что память под указатель на указатель var, который собсно является указателем на name, не правильно как-то выделяется, программа просто вылетает без какой-либо ошибки(возможно из-за того что программа является dll и подключается к другой программе в качестве плагина). Методом научного тыка узнал, что программа вылетает на этапе присвоения последнему символу длинны строки нуля (*var[n] = 0.

В общим кто знает в чём проблема, помогите пожалуйста, буду очень благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2010, 18:09     Выделение памяти под укзатель переданный функции
Посмотрите здесь:

C++ Выделение памяти под переменную
Выделение памяти под масссив C++
Выделение памяти под матрицу C++
Выделение памяти под строку C++
Выделение памяти под wchar_t C++
C++ Выделение памяти под структуры
Выделение памяти под указатель C++
Выделение памяти под массивы C++
Выделение памяти под структуру C++
Выделение памяти под структуру C++
C++ Выделение памяти под матрицу
Выделение памяти под указатель C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
4932 / 2512 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
25.06.2010, 18:13     Выделение памяти под укзатель переданный функции #2
интересно, даже не знаю, что предположить, может попробовать точное индексирование и что-то еще прояснится?
а-ля
C
1
var[0][n] = 0;
Nick Alte
Эксперт С++
1603 / 995 / 118
Регистрация: 27.09.2009
Сообщений: 1,918
Завершенные тесты: 1
25.06.2010, 20:40     Выделение памяти под укзатель переданный функции #3
C++
1
2
3
               *var = new char[n+1];  // записываем в var[0] адрес вновь созданной строки
                        memcpy(*var, *p, n); // Заносим строку *p в буфер var[0]
                        *var[n] = 0;    //  (var[n])[0] = 0;
Смотрим на последнюю строчку, ужасаемся, плачем.
TheSteelRat
0 / 0 / 0
Регистрация: 25.06.2010
Сообщений: 36
03.07.2010, 11:02  [ТС]     Выделение памяти под укзатель переданный функции #4
Большое спасибо всем за помощь... из-за приоритета операций всё пошло не так как хотелось...(((
Yandex
Объявления
03.07.2010, 11:02     Выделение памяти под укзатель переданный функции
Ответ Создать тему
Опции темы

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