powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамический массив
2 сообщений из 2, страница 1 из 1
Динамический массив
    #38562187
chicito1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, несколько дней не получается решить проблему, помогите. Задание: Вставить в один Array другой в определенное место. Ошибка в моем коде на втором пробеге. m_size не соответствует. Помогите пожалуйста чтоб код заработал

SmartBuffer.cpp
Код: plaintext
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&#246;&#223;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&#246;&#223;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&#246;&#223;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&#252;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) // &#220;berpr&#252;fung ob Position in g&#252;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) // &#220;berpr&#252;fung ob Position in g&#252;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&#246;&#223;ern
}
else
{
for(int i = m_size; i>p ; i--) // R&#252;ckwerts bis Position
{
m_buff[i] = m_buff[i-1]; // Verschiebung nach rechts
}
m_buff[p] = c; // Einf&#252;gen char in Position
/*assert(m_buff[1]=='p');*/ 
}
}
void SmartBuffer::InsertArrayAtPos(int p, char* buff, int s2)
{
if (p>m_size||p<0) // &#220;berpr&#252;fung ob Position in g&#252;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&#246;&#223;e von buff) vergr&#246;&#223;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
Код: plaintext
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;
}
...
Рейтинг: 0 / 0
Динамический массив
    #38562198
chicito1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chicito1988,

ошибка найдена
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамический массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]