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

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

Войти
Регистрация
Восстановить пароль
 
mhg
2 / 2 / 2
Регистрация: 21.04.2013
Сообщений: 192
#1

Memcpy - вылетает исключение - C++

15.04.2014, 21:24. Просмотров 438. Ответов 4
Метки нет (Все метки)

нужно добавлять в массив по одному элементу и при добавлении нового элемента динамически увеличивать память массива

но при копировании memcpy вылетает исключение - помогите понять причину

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
28
29
30
31
32
33
34
35
#include <iostream>
#include <string>
 
int kol_vo = 0;   //кол-во эл-тов в массиве
int *point;       //указатель на массив
 
void changePointer()   
 {
    int *p = new int [kol_vo];      //выделяем новую память
    memcpy (p,point,sizeof(point)); //копируем из старого массива в новый       <-----вылетает
    delete point;                       //обнуляем старую память
    point = NULL;
    point = p;                           //присваиваем указателю адрес нового массива
 }
 void add(int value)                 //добавление нового элемента в массив
 {  
    ++kol_vo;                     //кол-во эл-тов увеличивается
 
    changePointer();           //присваиваем указателю адрес нового массива 
    int ind = kol_vo-1;         //индекс в массиве
    point[ind] = value;   //записываем эл-т в массив
 }
 
int main()
{
    point = new int[1];  //изначально память под 1 э-т массива
    point = NULL;
    
    int a = 10;    
    point[0] = a;   //записываем а в 1 ячейку массива
 
    int b = 20;
    add (b);       //добавляем  b в массив
 
    return 0;}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2014, 21:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Memcpy - вылетает исключение (C++):

Memcpy, buffer overflow. Может ли возникнуть ошибка в функции memcpy - C++
Бывает ли на практике такое, что код #define size 1000; // some value int x, y; /* ... */ memcpy(y, x, (size + 1) * sizeof(int)); ...

При вызове CreateWindow в функции вылетает необработанное исключение (найти и исправить ошибку) - C++
При вызове CreateWindow в функции HRESULT Render_CreateWindow(LPCTSTR wclass, LPCTSTR wname, LPCSTR icon) { // Регистрация класса ...

Список. Программа вылетает с сообщением "Необработанное исключение" - C++
При дебаге, обнаружил, что это происходит в начале первого цикла. #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; ...

Не работает memcpy - C++
Нужно просто полностью скопировать первый массив, во второй, длина у них одинакова. Делаю так: BYTE in; // = {10, ...} типа заполнен...

memset, memcpy - C++
Использую MSVS 2008. Почему memcpy работает только с char? То есть, такой код работает: int main() { char a1 = &quot;123&quot;; ...

2d ---> 1d array и memcpy - C++
Можно ли сконвертировать двумерный массив в одномерный с помощью memcpy? Если да, то будет ли быстрее, чем тупое перебирание в циклах?

4
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
15.04.2014, 21:28 #2
mhg, вы же в 27 строке указываете на "пустоту", куда вы в 30й строке записываете значение?
1
mhg
2 / 2 / 2
Регистрация: 21.04.2013
Сообщений: 192
15.04.2014, 22:06  [ТС] #3
спасибо огромное!

Добавлено через 30 минут
НОВЫЙ ВОПРОС!!!
а почему при распечатывании этого в массива между первым и последним элементом мусор???

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
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <string>
 
int kol_vo = 0;
int *point;
 
void changePointer()
 {
    int *p = new int [kol_vo];
    memcpy (p,point,sizeof(point));
    delete point;
    point = p;
 }
 void add(int value)
 {  
    ++kol_vo;
 
    changePointer();
    int ind = kol_vo-1;
    point[ind] = value; 
 }
 
int main()
{
    point = new int[1];
    
    int a = 10;
    point[0] = a;
 
    add (20);
    add (30);
    add (40);
 
    for (int i=0; i<3; i++)
        {
            std::cout<<"\n"<<point[i];
        }
    return 0;}
0
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
15.04.2014, 22:25 #4
mhg,
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
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <string>
 
int kol_vo = 1;
int *point;
 
void changePointer()
 {
    int *p = new int [++kol_vo];
    memcpy (p,point,sizeof(point)*kol_vo);
    delete point;
    point = p;
 }
 void add(int value)
 {  
    changePointer();
    point[kol_vo-1] = value; 
 }
 
int main()
{
    point = new int[1];
    
    int a = 10;
    point[0] = a;
 
    add (20);
    add (30);
    add (40);
 
    for (int i=0; i<4; i++)
        {
            std::cout<<"\n"<<point[i];
        }
    system("pause");
    return 0;
}
1
mhg
2 / 2 / 2
Регистрация: 21.04.2013
Сообщений: 192
15.04.2014, 22:41  [ТС] #5
вы мне очень помогли!
0
15.04.2014, 22:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2014, 22:41
Привет! Вот еще темы с ответами:

Memcpy и динамические массивы - C++
Почему значение массива A изменилось? Как этого избежать? int *a = new int ; A = 3; a = 5; int *b = new int ; ...

Strict aliasing и memcpy - C++
Что-то я никак не врублюсь, как согласуются между собой strict aliasing и функции жонглирующие void*? Возьмем для примера memcpy....

Насчёт функции memcpy() - C++
Начинаяю использовать эту функцию.Её синтаксис: void memcpy(void *to, const void *from, size_t count); Вопрос_1: Что такое...

Объяснить работу Memcpy - C++
Доброго времени суток! Можете пояснить работу memcpy под C++? Что-то у меня определённо работает не так. Например такой код: ...


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

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

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