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

Динамический массив. Вставить в один Array другой в определенное место - C++

Восстановить пароль Регистрация
 
chicito1988
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 2
16.02.2014, 12:25     Динамический массив. Вставить в один Array другой в определенное место #1
Здравствуйте, несколько дней не получается решить проблему, помогите. Задание: Вставить в один Array другой в определенное место. Ошибка в моем коде на втором пробеге. m_size не соответствует. Помогите пожалуйста чтоб код заработал

SmartBuffer.cpp
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include"stdafx.h"
#include"SmartBuffer.h"
#include<iostream>
#include <assert.h>
 
SmartBuffer::SmartBuffer( int maxSz, char *iniArray, int iniArraySize)
{
    const int MIN_BUF_SIZE = 5;
    m_size = 0; // Size von Array definieren
    m_maxSize = (maxSz < MIN_BUF_SIZE ? MIN_BUF_SIZE : maxSz); // if maxSz ist < als sz dann MaxSize = größter von zwei 
    m_buff = new char[m_maxSize];
    
    ////////////////////////////////
    if(iniArray) // Elementen definieren in Konstruktor // 
    {
        //was, wenn m_maxSize < iniArraySize????
        for (int i = 0; i<iniArraySize; i++)
            m_buff[i] = iniArray[i];
    }
}
SmartBuffer::~SmartBuffer(void)
{
    delete[] m_buff;
}
void SmartBuffer::IncreaseSize(int newSize)
{
        m_maxSize = m_size + newSize; // Neue größe von m_buff
        char *newArray = new char[m_maxSize]; // Neue Array erstellen
 
        for(int i = 0; i<m_size; i++)
        {
            newArray[i]= m_buff[i]  ; // Kopie von Elementen
        }
        delete [] m_buff;
        m_buff = newArray;
}
 
void SmartBuffer::Add(unsigned char _ch)
{
    const int DELTA_RESIZE = 10;
    if( m_size == m_maxSize) 
    {
        m_maxSize = m_size + DELTA_RESIZE; // Neue größe von m_buff
        char *newArray = new char[m_maxSize]; // Neue Array erstellen
 
        for(int i = 0; i<m_size; i++)
        {
            newArray[i]= m_buff[i]  ; // Kopie von Elementen
        }
        delete [] m_buff;
        m_buff = newArray;
    }
    m_buff[m_size] = _ch; // Element einfГјgen am Ende Array
    m_size ++;
}
char SmartBuffer::getAtPos(int p)
{
    if (p>=m_size||p<0)
        throw out_of_range("p index ist out of range");
    else
        return m_buff[p];   
}
int SmartBuffer::GetSize()
{
    return m_size-1; // letzte Element in Array
}
void SmartBuffer::RemoveAtPos(int p)
{
    if (p>=m_size||p<0) // ГњberprГјfung ob Position in gГјltige Bereich ist
        throw out_of_range("p index ist out of range");
    else    
        for(int i = p; i<m_size; i++) // von p bis Ende
        {
            m_buff[i] = m_buff[i+1]; // Verschiebung nach links
        }
        m_buff[m_size-1] = 0; // Letzte position auf 0
        m_size--; // Size um 1 verkleinern
}
void SmartBuffer::InsertAtPos(int p, char c)
{
    if (p>=m_size||p<0) // ГњberprГјfung ob Position in gГјltige Bereich ist
        throw out_of_range("p index ist out of range");
    if(m_size==m_maxSize) // wenn Array zu klein
    {
        IncreaseSize(m_size+1); // Array vergrößern
    }
    else
    {
        for(int i = m_size; i>p ; i--) // RГјckwerts bis Position
        {
            m_buff[i] = m_buff[i-1]; // Verschiebung nach rechts
        }
        m_buff[p] = c; // EinfГјgen char in Position
        /*assert(m_buff[1]=='p');*/ 
    }
}
void SmartBuffer::InsertArrayAtPos(int p, char* buff, int s2)
{
    if (p>m_size||p<0) // ГњberprГјfung ob Position in gГјltige Bereich ist
        throw out_of_range("p index ist out of range");
 
    if(m_maxSize < m_size + s2) // Wenn Array zu klein, dann um s2(größe von buff) vergrößern
        IncreaseSize(s2); 
    
    for (int j=m_size; j>=p && m_size != 0; j--) //j von index 4 bis 2 m_buff
    {
        m_buff[j] = m_buff[j+s2]; // Verschiebung 0 nach 4
    
    }
        for(int i = 0; i<=s2; i++) //Externe buff index {0,1,2}
    {   
        m_buff[p] = *(buff+i); // in m_buff speichern buff von p=2 Inhalt{100,101,102}
        p++; // position m_buff verschieben
        m_size++;
    
    }
        
}
SpecherDan.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// SpeicherDynam.cpp : Definiert den Einstiegspunkt fьr die Konsolenanwendung.
#include "stdafx.h"
#include"SmartBuffer.h"
#include <assert.h>
#include<iostream>
 
int main()
{
    SmartBuffer sb(15);
 
char pB[] =  {0,1,2,3};
    const int bsz = 4;
    SmartBuffer sb2;
    for(int i = 0; i < 10; i++)
    {
        sb2.InsertArrayAtPos(i, pB, bsz);
        assert((i+1)* bsz == sb2.GetSize());
 
    }
 
 
    return 0;
}
Добавлено через 28 минут
ошибка найдена
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2014, 12:25     Динамический массив. Вставить в один Array другой в определенное место
Посмотрите здесь:

C++ Нужно последовательно собрать их в один динамический массив.
Как перевести каретку в определенное место? C++
C++ Один большой динамический массив вместо нескольких меньшего размера
C++ Динамический массив строк (вставить строку с номером к)
C++ Возможно ли объекты и потомки этих объектов поместить в один и тот же динамический массив?
Вставить элемент в динамический массив C++
Вернуться в определенное место программы C++
Скопировать один динамический массив в другой C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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