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

Выход за пределы массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Получить доступ к локальной переменной другой функции http://www.cyberforum.ru/cpp-beginners/thread1774304.html
Что не так?Можно ли тут обойтись без указателя? #include <iostream> using namespace std; int a = 0; void m(void) { extern int b; a++; b++; }
C++ Выделение и очистка динамической памяти Добрый день. Никак не могу найти информацию по следующему вопросу. Допустим создаем динамический массив строк. char** mass=new char* for (int i=0;i<count;i++) { mass=new char ; } http://www.cyberforum.ru/cpp-beginners/thread1774291.html
C++ Препроцессор vs текст
Привет. Я баловался с директивами препроцессора и как-то задумал с помощью директивы #include вставить текст в char *. У меня вышло, я вставил текст типа "test!". test.txt: "test!" main.cpp: #include <iostream> constexpr char * line =
C++ Указатели и динамическая память
Здравствуйте. Почему размер памяти для указателя выделяется такой же как для объекта в куче. Например: int * pVar = new int;Как я понял, память для указателя выделяется в стеке, но тип (размер) должен совпадать с типом памяти выделяемой в куче. Если, например, объект myObj занимает много памяти, то память в стеке расходуется попусту т.к. она содержит только адрес объекта в куче. myObj * pVar =...
C++ Перенести все числа массива меньшие первого элемента в начало http://www.cyberforum.ru/cpp-beginners/thread1774266.html
Выполните сортировку массива следующим образом. Все числа меньшие первого должны предшествовать этому первому числу, а все большие него идти за ним. Заранее спасибо.
C++ Двумерный массив. Функция возвращает мусор Добрый день. Необходимо сгенерировать матрицу и заполнить ее. Написал вот такую функцию float** GenerateNaturalNumbers(int & n, int & m, std::string &Name) { // rows float **mass = new float*; подробнее

Показать сообщение отдельно
bookread1
0 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 8

Выход за пределы массива - C++

01.07.2016, 01:30. Просмотров 260. Ответов 5
Метки (Все метки)

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
#include <assert.h>
#include <assert.h>
#include <string.h>
#include <stdint.h>
#include <limits.h>
 
int get_bit(const void *in, size_t n)
{
    return (((const uint8_t*)in)[n / CHAR_BIT] & (1 << (n % CHAR_BIT))) != 0;
}
 
void set_bit(void *out, size_t n, int bit)
{
    if (bit)
        ((uint8_t*)out)[n / CHAR_BIT] |= (1 << (n % CHAR_BIT));
    else
        ((uint8_t*)out)[n / CHAR_BIT] &= ~(1 << (n % CHAR_BIT));
}
 
void flip_bit(void *out, size_t n)
{
    ((uint8_t*)out)[n / CHAR_BIT] ^= (1 << (n % CHAR_BIT));
}
 
size_t encode(void *out, const void *in, size_t in_bits)
{
    size_t i, j, k;
    unsigned s = 0;
 
    for (i = j = 0; j < in_bits; ++i) {
        if ((i + 1) & i) {
            if (get_bit(in, j))
                s ^= i + 1;
            set_bit(out, i, get_bit(in, j));
            ++j;
        }
    }
    for (k = 1; k < i; k <<= 1) {
        set_bit(out, k - 1, s & k);
    }
    return i;
}
 
size_t decode(void *out, const void *in, size_t in_bits, unsigned *out_syndrome)
{
    size_t i, j;
    unsigned s = 0;
 
    for (i = j = 0; i < in_bits; ++i) {
        if (get_bit(in, i))
            s ^= i + 1;
        if ((i + 1) & i) {
            set_bit(out, j, get_bit(in, i));
            ++j;
        }
    }
    *out_syndrome = s;
    return j;
}
 
size_t decode_and_fix(void *out, const void *in, size_t in_bits)
{
    unsigned s;
    size_t out_bits = decode(out, in, in_bits, &s);
 
    if (s && s <= in_bits && (s & (s - 1))) {
        unsigned k;
 
        for (k = 0; 1u << k < s; ++k);
        flip_bit(out, s - k - 1);
    }
    return out_bits;
}
 
int main()
{
    char habr[4] = "habr";
    char encoded[5];
    char decoded[4];
    unsigned s;
    size_t i;
 
    size_t encoded_bits = encode(encoded, habr, sizeof(habr) * CHAR_BIT);
    size_t decoded_bits = decode(decoded, encoded, encoded_bits, &s);
    assert(s == 0);
    assert(encoded_bits == sizeof(habr) * CHAR_BIT + 6);
    assert(decoded_bits == sizeof(habr) * CHAR_BIT);
    assert(memcmp(habr, decoded, sizeof(habr)) == 0);
 
    for (i = 0; i < encoded_bits; ++i) {
        flip_bit(encoded, i);
        decoded_bits = decode(decoded, encoded, encoded_bits, &s);
        decoded_bits = decode_and_fix(decoded, encoded, encoded_bits);
        assert(decoded_bits == sizeof(habr) * CHAR_BIT);
        assert(memcmp(habr, decoded, sizeof(habr)) == 0);
        flip_bit(encoded, i);
    }
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru