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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ ошибка 4996 strncpy http://www.cyberforum.ru/cpp-beginners/thread1097701.html
#include<iostream> #include<Windows.h> #include<fstream> #include<cstring> #include<cstdlib> #include <conio.h> #include <stdio.h> #include<string.h> using namespace std;
C++ Простенький интерпретатор Привет. Подскажите какие то маленькие ЯП, хочу написать маленький интерпретатор. Спасибо. P.S. не то чтобы как HQ9+, но и не С++. http://www.cyberforum.ru/cpp-beginners/thread1097700.html
Расстояние между точками x0 y0 x1 y1 C++
Всем привет, не могу понять в чем проблема программы: Найти расстояние между двумя точками заданными координатами(x1,y1) && (x2,y2) Программы как бы работает но считает не правильно , если не трудно посмотрите у себя) вот код программы #include<stdio.h> #include<math.h>
Вычислить значение выражения dl ± d2 ± ... ± dn C++
Дан текст, имеющий вид: dl ± d2 ± ... ± dn, где di — цифры. Вычислить значение данного выражения. Называйте темы осмысленно.
C++ Вывести только те слова сообщения, которые встречаются в тексте один раз http://www.cyberforum.ru/cpp-beginners/thread1097683.html
Дано осмысленное текстовое сообщение (т.е. алфавитно-цифровая информация, разделенная пробелами и знаками препинани, в конце которого ставится точка): Вывести только те слова сообщения, которые встречаются в нем ровно один раз. Помогите с кодом. Добавлено через 5 часов 14 минут ап темы Добавлено через 3 часа 1 минуту
C++ Программа определяет, сколько точек пересечения образуют по координатам окружности С клавиатуры вводится 6 чисел. Программа определяет, сколько точек пересечения образуют по этим координатам окружности. Нужно с операторами printf и scanf. Не могу решить эту задачу, помогите. подробнее

Показать сообщение отдельно
chicito1988
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 2
16.02.2014, 12:25     Динамический массив. Вставить в один Array другой в определенное место
Здравствуйте, несколько дней не получается решить проблему, помогите. Задание: Вставить в один 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 минут
ошибка найдена
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru