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

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

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

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

25.06.2010, 18:09. Просмотров 413. Ответов 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.

В общим кто знает в чём проблема, помогите пожалуйста, буду очень благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2010, 18:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение памяти под укзатель переданный функции (C++):

Выделение памяти под файл - C++
Всем доброго времени суток. Написал некоторую структуру, работают все пунктики, все функции, но нашёлся недочёт. Если записывать в файл...

Выделение памяти под массивы - C++
int **mas1 = new int*; for (int e = 0; e < q; e++) mas1 = new int; int **mas2 = new int*; for (int q = 0; q < e;...

Выделение памяти под структуру - C++
Наведите пример выделения памяти под структуру

Выделение памяти под указатель - C++
Доброго времени суток. Возник такой вопрос: для любой программы, насколько мне известно, выделяется свой кусочек оперативной памяти. Когда...

Выделение памяти под переменную - C++
Драсте, уважаемые. Мне надо выделить переменную на 25мег, чтоб в ней хранить все просчёты выполненые программой. (Пробовал в BCB6 и в BCW...

Выделение памяти под указатель - C++
Здравствуйте форумчане,у меня возник маленький вопрос:) Почему sizeof(char) дает результат в 1 байт, а sizeof(char*) ) дает 4 байта.Как...

3
fasked
Эксперт С++
4945 / 2525 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
25.06.2010, 18:13 #2
интересно, даже не знаю, что предположить, может попробовать точное индексирование и что-то еще прояснится?
а-ля
C
1
var[0][n] = 0;
0
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 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;
Смотрим на последнюю строчку, ужасаемся, плачем.
0
TheSteelRat
0 / 0 / 0
Регистрация: 25.06.2010
Сообщений: 36
03.07.2010, 11:02  [ТС] #4
Большое спасибо всем за помощь... из-за приоритета операций всё пошло не так как хотелось...(((
0
03.07.2010, 11:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2010, 11:02
Привет! Вот еще темы с ответами:

Выделение памяти под матрицу - C++
Всем доброго времени суток! Есть такая проблема, у меня есть свой класс Cell. Мне нужно создать матрицу объектов этого типа и выделить под...

Выделение памяти под масссив - C++
Как занести данные в двумерный массив с клавиатуры? пользователь должен сам ввести размерность

Выделение памяти под структуру - C++
Доброго дня, товарисчи. В общем, возникла проблема при выделении памяти для структуры. Подскажите, пожалуйста, в чем ошибка. Собсна сам...

Выделение памяти под wchar_t - C++
вот такой код: char *str=new char; strcpy(str,"stroka"); int l=strlen(str); wchar_t *wstr=new wchar_t; mbstowcs(wstr,str,l); ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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