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

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

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

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

15.04.2014, 21:24. Просмотров 405. Ответов 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;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2014, 21:24     Memcpy - вылетает исключение
Посмотрите здесь:

C++ Насчёт функции memcpy()
C++ Как работает memcpy?
Своя реализация memcpy C++
memset, memcpy C++
Memcpy, buffer overflow. Может ли возникнуть ошибка в функции memcpy C++
2d ---> 1d array и memcpy C++
Список. Программа вылетает с сообщением "Необработанное исключение" C++
Объяснить работу Memcpy C++
Memcpy и динамические массивы C++
C++ Работа функции memcpy
C++ При вызове CreateWindow в функции вылетает необработанное исключение (найти и исправить ошибку)
C++ Не работает memcpy

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
15.04.2014, 21:28     Memcpy - вылетает исключение #2
mhg, вы же в 27 строке указываете на "пустоту", куда вы в 30й строке записываете значение?
mhg
2 / 2 / 2
Регистрация: 21.04.2013
Сообщений: 188
15.04.2014, 22:06  [ТС]     Memcpy - вылетает исключение #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;}
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
15.04.2014, 22:25     Memcpy - вылетает исключение #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;
}
mhg
2 / 2 / 2
Регистрация: 21.04.2013
Сообщений: 188
15.04.2014, 22:41  [ТС]     Memcpy - вылетает исключение #5
вы мне очень помогли!
Yandex
Объявления
15.04.2014, 22:41     Memcpy - вылетает исключение
Ответ Создать тему
Опции темы

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