Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
31 / 22 / 10
Регистрация: 08.03.2020
Сообщений: 113

Ошибка во время освобождения памяти двумерного динамического массива, созданного malloc()

05.03.2026, 12:53. Показов 2594. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Изучаю C по книгам самостоятельно.
Прошу помощи у знающих людей.

Решаю задачу на динамическое выделение памяти. Написал программу, которая должна вычислять среднее по температуре за каждый день. Каждый день - это одна строка user input с 3-мя значениями. Программа считывает произвольное количество строк с 3-мя цифрами (строка == день), вычисляет среднее значение температуры за каждый день и выводит пользователю.
Но при попытке освободить память, соответствующей строки массива, вываливается в ошибку.
Что я делаю не так?
Прошу не кидать тапками, так как я тупарь-самоучка.
Всем откликнувшимся БОЛЬШОЕ СПАСИБО!!

Код:
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
#define MAX_LEN 2
 
#include <stdio.h>
#include <stdlib.h>
 
int main(){
    double **temp=(double **)malloc(sizeof(double*)*MAX_LEN);
    double **tmpPtr={NULL};
    double *out=(double *)malloc(sizeof(double)*MAX_LEN);
    
    double summ=0.0;
    
    int max_len=0;
    int resize=MAX_LEN;
    //считываем цифры в двумерный массив
    while(1){
        
        if (max_len%2==0 && max_len>0){
            resize*=2;
            tmpPtr=(double**)realloc(temp, sizeof(double*)*resize);
            
            if (!tmpPtr){
                printf("allocation memory error!!\n");
                return 1;
            }
            temp=tmpPtr;
        }
        temp[max_len]=(double *)malloc(sizeof(double)*3);
        
        if (scanf("%lf %lf %lf", &temp[max_len][0], &temp[max_len][1], &temp[max_len][2])!=3)
            break;
            
        max_len++;
    }
    //считаем среднее
    for (int i=0; i<max_len;++i){
        for (int j=0;j<3;++j)
            summ+=temp[i][j];
        out[i]=summ/(double)3;
        summ=0;
    }
    
       //выводим результат
    for (int i=0; i<max_len;++i){
        printf("the evrage temp per %d day is %.2f\n", i+1, out[i]);
    }   
    
        //освобождаем память
    for (int i=0; i<max_len;++i){
        free(temp[i]); // вот здесь ошибка
        temp[i]=NULL;
    }
    
    free(temp);
    temp=NULL;
    
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.03.2026, 12:53
Ответы с готовыми решениями:

Malloc ошибка освобождения памяти
ЧЯДНТ? Косяк такой: heap corruption detected before normal block (№0) at 0x... CRT detected...

Распределение памяти для выделения и освобождения блоков памяти внутри запрошенного пула
В программе малые&quot;дыры&quot; избегают,что нужно сделать что бы малые &quot;дыры&quot; не избегались.... #...

В чем разница между malloc() и (char *)malloc()
Прошу помочь разобраться: не могу понять в чем разница междуs=malloc(sizeof(char)); иs=(char...

50
31 / 22 / 10
Регистрация: 08.03.2020
Сообщений: 113
05.03.2026, 18:23  [ТС]
Студворк — интернет-сервис помощи студентам
TheCalligrapher, спасибо большое за участие!
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
"выделять память при большем объеме" нужно примерно только тогда, когда это действительно надо
это я понял.
Исправил первоначальный код, но все равно вываливается в Sigmentation fault.
Я думаю, что упускаю что-то важное и оно рядом...
причесанный код из 1 сообщения (добавил комментарии):
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
#include <stdio.h>
#include <stdlib.h>
 
int main(){
    double **temp=malloc(sizeof(double*)); // двумерный массив для хранения 3-х температур за день по неограниченному количеству дней
    double *out=malloc(sizeof(double)); //массив для хранения средних значений по каждому дню (используется для печати результата)
    
    double summ;
    int max_len=0; //максимальное количество строк в массиве temp
    int resize=1; // переменная-счетчик, для увеличения размера массива temp
    
    
    temp[max_len]=(double *)malloc(sizeof(double)*3);
    
    while(scanf("%lf %lf %lf", &temp[max_len][0], &temp[max_len][1], &temp[max_len][2])==3)
    {
        ++resize; // увеличиваем счетчик на 1 (НОВАЯ СТРОКА)
        size_t new_size=(resize)*sizeof(double*); // новый размер массива temp
        temp=realloc(temp, new_size); // выделяем память нового размера
        
        //проверяем, что память выделена корректно
        if (!temp)
        {
            printf("memory allocation error\n");
            return 1;
        }
        
        max_len++; // увеличиваем счетчик на 1
        temp[max_len]=(double *)malloc(sizeof(double)*3); //выделяем память для новых 3-х столбцов (чисел)
        
        //проверяем, что память выделена корректно
        if (!temp[max_len])
        {
            printf("memory allocation error in index 'max_len'\n");
            return 2;
        }
    }
    
    //запись средних значений по каждой строке в массив out
    for (int i=0; i<max_len;++i)
    {
        summ=0; // обнуляем сумму по строке
        for (int j=0;j<3;++j)
            summ+=temp[i][j]; // суммируем числа в каждой строке
        out[i]=summ/(double)3; //записываем среднне по строку в массив out
        
    }
    
    //печатаем результат
    for (int i=0; i<max_len;++i)
    {
        printf("the evrage temp per %d day is %.2f\n", i+1, out[i]);
    }   
    
    free(out); // освобождаем паямть out
 
    for (int i=0; i<max_len;++i)
    {
        free(temp[i]); // вот здесь ошибка
    }
 
    free(temp);
 
    return 0;
}
то есть проблема, думаю вот здесь:
C
1
2
3
    ++resize; // увеличиваем счетчик на 1 (НОВАЯ СТРОКА)
        size_t new_size=(resize)*sizeof(double*); // новый размер массива temp
        temp=realloc(temp, new_size); // выделяем память нового размера
Можете подсказать, где я ошибаюсь?
Большое спасибо!
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
05.03.2026, 18:32
Цитата Сообщение от artemkau88 Посмотреть сообщение
это я понял.
Исправил первоначальный код, но все равно вываливается в Sigmentation fault.
Я думаю, что упускаю что-то важное и оно рядом...
TheCalligrapher, ты это породил - ты и разгребай теперь. Я пошёл ужин готовить.
0
31 / 22 / 10
Регистрация: 08.03.2020
Сообщений: 113
05.03.2026, 19:12  [ТС]
Рабочий код из варианта 2. Вроде бы учел все комментарии от TheCalligrapher
код:
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
#include <stdio.h>
#include <stdlib.h>
 
double *calculate_average_temp(double *in[], int max_size);
void print_results(double in[], int max_size);
void free_memory_function(double **in, int max_size);
 
 
int main()
{
    double **temp_array=malloc(sizeof(double *));
    
    int max_size=0;
    int size=1;
    
    temp_array[max_size]=malloc(sizeof(double)*3);
    
    while (scanf("%lf %lf %lf", &temp_array[max_size][0],
        &temp_array[max_size][1], &temp_array[max_size][2])==3)
    {
        size++; // увеличиваем счетчик на 1
        temp_array=realloc(temp_array, sizeof(double *)*size); // resize массива temp_array
        if (!temp_array)
        {
            printf("allocation memory error\n");
            return 1;
        }
        max_size++;
        temp_array[max_size]=malloc(sizeof(double)*3);
    }
    
    free(temp_array[max_size]); // очищаем последний элемент массива temp_array, содержащего мусор
    
    double *result_temp_array=calculate_average_temp(temp_array, max_size);
    
    print_results(result_temp_array, max_size);
    free_memory_function(temp_array, max_size); // освобождаем память
    
    free(result_temp_array); //освобождаем память
    
    return 0;
}
 
double *calculate_average_temp(double *in[], int max_size)
{
    double summ=0.0;
    double average=0.0;
    double *out=malloc(sizeof(double)*max_size);
    
    for (int i=0; i<max_size;++i)
    {
        summ=0;
        for (int j=0;j<3;++j)
            summ+=in[i][j];
        average=summ/(double)3;
        out[i]=average;
    }
    return out;
}
 
void print_results(double in[], int max_size)
{
    for (int i=0; i<max_size;++i)
    {
        printf("the average temp %d day is %.2f\n",
                i+1, in[i]);
    }
}
 
void free_memory_function(double **in, int max_size)
{
    for (int i=0; i<max_size;++i)
    {
        free(in[i]);
    }
    free(in);
    printf("ALL MEMORY CLEARED\n");
}
Про малый начальный размер динамического массива temp_array я знаю. Это сделано специально, чтобы потренироваться.
Как пишут в книгах по С, так делать не рекомендуется, так как это влечет за собой большие накладные расходы. Оно и понятно.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
05.03.2026, 19:23
Цитата Сообщение от artemkau88 Посмотреть сообщение
Это сделано специально, чтобы потренироваться.
Тренироваться надо как-то по-другому. Чтоб здравый смысол был.
0
31 / 22 / 10
Регистрация: 08.03.2020
Сообщений: 113
05.03.2026, 19:33  [ТС]
Разобрался!!!
В первом варианте из сообщения 21 ошибка была в строке:
C
1
 double *out=malloc(sizeof(double)); //массив для хранения средних значений по каждому дню (используется для печати результата)
выделил память, но потом, в коде дальше, при работе с этим массивом, был выход за его границы, здесь:
C
1
2
3
4
5
6
7
8
9
    //запись средних значений по каждой строке в массив out
    for (int i=0; i<max_len;++i)
    {
        summ=0; // обнуляем сумму по строке
        for (int j=0;j<3;++j)
            summ+=temp[i][j]; // суммируем числа в каждой строке
        out[i]=summ/(double)3; //записываем среднне по строку в массив out
        
    }
Исправленный код:
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
#include <stdio.h>
#include <stdlib.h>
 
int main(){
    double **temp=malloc(sizeof(double*)); // двумерный массив для хранения 3-х температур за день по неограниченному количеству дней
    
    double summ;
    int max_len=0; //максимальное количество строк в массиве temp
    int resize=1; // переменная-счетчик, для увеличения размера массива temp
    
    
    temp[max_len]=malloc(sizeof(double)*3);
    
    while(scanf("%lf %lf %lf", &temp[max_len][0], &temp[max_len][1], &temp[max_len][2])==3)
    {
        ++resize; // увеличиваем счетчик на 1 (НОВАЯ СТРОКА)
        temp=realloc(temp,sizeof(double*)*resize); // выделяем память нового размера
        
        //проверяем, что память выделена корректно
        if (!temp)
        {
            printf("memory allocation error\n");
            return 1;
        }
        
        max_len++; // увеличиваем счетчик на 1
        temp[max_len]=malloc(sizeof(double)*3); //выделяем память для новых 3-х столбцов (чисел)
        
        //проверяем, что память выделена корректно
        if (!temp[max_len])
        {
            printf("memory allocation error in index 'max_len'\n");
            return 2;
        }
    }
    
    free(temp[max_len]); // освобождаем последнюю строку (содержащую мусор)
    
    double *out=malloc(sizeof(double)*max_len); //массив для хранения средних значений по каждому дню (используется для печати результата)
    
    //запись средних значений по каждой строке в массив out
    for (int i=0; i<max_len;++i)
    {
        summ=0; // обнуляем сумму по строке
        for (int j=0;j<3;++j)
            summ+=temp[i][j]; // суммируем числа в каждой строке
        out[i]=summ/(double)3; //записываем среднне по строку в массив out
        
    }
    
    //печатаем результат
    for (int i=0; i<max_len;++i)
    {
        printf("the avrage temp per %d day is %.2f\n", i+1, out[i]);
    }   
    
    for (int i=0; i<max_len;++i)
    {
        free(temp[i]); // вот здесь ошибка
    }
 
    free(temp);
    free(out); // освобождаем паямть out
    
    return 0;
}
Цитата Сообщение от Verevkin Посмотреть сообщение
Тренироваться надо как-то по-другому. Чтоб здравый смысол был.
Просто сейчас занимаюсь по книге, и именно такое задание было. Спасибо Большое!
Еще раз спасибо большое всем откликнувшимся!
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
05.03.2026, 19:35
Цитата Сообщение от artemkau88 Посмотреть сообщение
Просто сейчас занимаюсь по книге, и именно такое задание было.
Чо за книга? Дай.
0
31 / 22 / 10
Регистрация: 08.03.2020
Сообщений: 113
05.03.2026, 19:46  [ТС]
Beginning C. From beginning to Pro
ссылка
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
05.03.2026, 20:08
Цитата Сообщение от artemkau88 Посмотреть сообщение
Beginning C. From beginning to Pro
ссылка
Не надо ссылку. Книгу дай.
Не надо, нашёл.
А чо она на английском? Ты американец, штоли?
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
05.03.2026, 20:25
Действительно, на английском. На русском читать не умеешь?

0
657 / 410 / 76
Регистрация: 21.09.2008
Сообщений: 1,409
06.03.2026, 16:10
Цитата Сообщение от Verevkin Посмотреть сообщение
На русском читать не умеешь?
Многие жалуются, что переводная иностранная литература часто страдает наличием большого числа ошибок при переводе. Например, так случилось с книгой Хоровица и Хилла "Искусство схемотехники" (ЕМнИП, второе издание), на Хабре были статьи на эту тему. Поэтому умение читать первоисточники весьма полезно, развивает память, расширяет эрудицию.
По языку Си из иностранной литературы мне запомнилась книга K. N. King "C Programming. Modern Approach (Second Edition, 2008)". На русском запомнились книги Бена Клеменса "Язык Си в XXI веке." Изд-во ДМК-Пресс, 2015. - 376 с. и Амини Камран "Экстремальный Cи. Параллелизм, ООП и продвинутые возможности." СПб.: Питер, 2021. — 752 с.
В Сети в электронном виде найти можно.
1
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
06.03.2026, 19:15
Цитата Сообщение от sharpey Посмотреть сообщение
Многие жалуются, что переводная иностранная литература часто страдает наличием большого числа ошибок при переводе. Например, так случилось с книгой Хоровица и Хилла "Искусство схемотехники" (ЕМнИП, второе издание), на Хабре были статьи на эту тему. Поэтому умение читать первоисточники весьма полезно, развивает память, расширяет эрудицию.
По языку Си из иностранной литературы мне запомнилась книга K. N. King "C Programming. Modern Approach (Second Edition, 2008)". На русском запомнились книги Бена Клеменса "Язык Си в XXI веке." Изд-во ДМК-Пресс, 2015. - 376 с. и Амини Камран "Экстремальный Cи. Параллелизм, ООП и продвинутые возможности." СПб.: Питер, 2021. — 752 с.
В Сети в электронном виде найти можно.
Шошо?
0
31 / 22 / 10
Регистрация: 08.03.2020
Сообщений: 113
07.03.2026, 13:58  [ТС]
sharpey, спасибо большое!
Мне понравилась подборка из это темы на stackoverflow
0
07.03.2026, 14:16

Не по теме:

Цитата Сообщение от sharpey Посмотреть сообщение
книгой Хоровица и Хилла
Я себе в прошлом году купил последнее издание, двухтомник. Понятно, что не оригинал (т.к. он по 100 баксов за том!), а китайский репринт (за два тома вышло 3 с чем-то тысячи рублей). Читается легко, от силы одно-два незнакомых слова на страницу, да и то очень редко их не понимаешь из контекста.

0
657 / 410 / 76
Регистрация: 21.09.2008
Сообщений: 1,409
07.03.2026, 16:49
Цитата Сообщение от Verevkin Посмотреть сообщение
Шошо
А то! Тут, кстати, по ссылке данной artemkau88, увидел книгу "Expert C Programming: Deep C Secrets" - Peter van der Linden (1994) про "подводные камни" языка Си. Насколько я знаю, она до сих пор не переведена на русский язык. Я её давно читал в оригинале - зело полезная, прочитать нужно каждому уважающему себя Сионисту. Если коснулись безопасного программирования на языке Си, то мне понравилась книга Роберт С. Сикорд Безопасное программирование на языке С и С++, 2-е изд.: - М.: ООО "И.Д. Вильямс", 2015. - 496 с..
1
Нарушитель
595 / 867 / 103
Регистрация: 23.11.2021
Сообщений: 5,130
Записей в блоге: 18
07.03.2026, 16:58
Цитата Сообщение от sharpey Посмотреть сообщение
"Expert C Programming: Deep C Secrets"
Читал эту книгу. Ничего нового или стóящего. Переливание из пустого в порожнее…
0
657 / 410 / 76
Регистрация: 21.09.2008
Сообщений: 1,409
07.03.2026, 17:07
Eddy_Em, для искушенного в знании Си - возможно покажется такой. Предлагаю ещё одну книгу:
Роберт С. Сикорд Эффективный C. Профессиональное программирование. - СПб.: Питер, 2021. - 304 с.
1
Нарушитель
595 / 867 / 103
Регистрация: 23.11.2021
Сообщений: 5,130
Записей в блоге: 18
07.03.2026, 19:26
sharpey, чтобы хорошо знать С, достаточно K&R. А о более-менее новомодных вещах можно в стандарте прочитать.
Кстати, в С как бы добавили constexpr. А почему "как бы" — да потому, что на текущий момент это от обычной константы вообще ничем не отличается! И приходится городить всякие кодогенераторы, чтобы для микроконтроллера сделать разбор хэшей команд.
Т.е. плюсер пишет:
C
1
2
3
4
5
6
switch(hash){
  case constexpr hashfn("command1"):
     ...
  break;
  case constexpr hashfn("command2"):
...
А сишник так написать не может, увы. И приходится это генерировать. И каждый себе генераторы пишет, я - не исключение.
0
443 / 168 / 29
Регистрация: 12.12.2020
Сообщений: 1,342
07.03.2026, 19:33
Цитата Сообщение от alecss131 Посмотреть сообщение
Дело привычки, меня наоборот тошнит от отрывания скобки от строки, крайне не удобно читать. На картинке подписи надо местами поменять.
вот вот, аналогично. Мне тоже привычен вариант со скобкой на строке. А если скобка отдельно на строке то и текст больше строк занимает...

Добавлено через 2 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Также: приведения типов на функциях выделения памяти в С коде
но практика показывает, что это лечить бесполезно...
а в чем криминал то? Если этот код в будущем компилировать в с++ то он будет требовать указание типа выделенной памяти...
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13205 / 6840 / 1822
Регистрация: 18.10.2014
Сообщений: 17,298
07.03.2026, 20:01
Цитата Сообщение от Alex1126 Посмотреть сообщение
Если этот код в будущем компилировать в с++ то он будет требовать указание типа выделенной памяти...
Если С код в будущем компилировать в С++, то он может много чего "потребовать". С - это не подмножество С++ и в общем случае при переходе не С++ менять придется много. По поводу неявного преобразования из void * беспокоиться вообще смысла нет - компилятор С++ поймает и укажет все такие места.

В тех случаях, когда кросс-компилируемый С/С++ код действительно нужен (в кросс-компилируемых заголовочных файлах) - это особый стиль программирования со своими правилами и приемами. (Я бы лично советовал все "ненужное", что вписано в С код для совместимости с С++ кодом помечать особым образом. Например, приведения типов, навязанные С++, выполнять через #define CPP_CAST(T, v) ((T) v) и т.п.)

А за пределами явного намерения/необходимости написать кросс-компилируемый С/С++ код вопроса "если этот код в будущем компилировать в с++..." просто не существует. Если вы пишете на С, то вы пишете на С. Не надо оглядываться на С++. Это совсем другой язык.
0
443 / 168 / 29
Регистрация: 12.12.2020
Сообщений: 1,342
07.03.2026, 20:02
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
А за пределами явного намерения/необходимости написать кросс-компилируемый С/С++ код вопроса "если этот код в будущем компилировать в с++..." просто не существует. Если вы пишете на С, то вы пишете на С.
да, согласен, ляпнул не то
Но все равно по моему привычка определять тип выделяемой памяти это не криминал и поможет если в будущем писать под плюсы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.03.2026, 20:02
Помогаю со студенческими работами здесь

Освобождение памяти в динамическом двумерном массиве
Здравствуйте, скажите пожалуйста как освобождать память в динамическом двумерном массиве ? В...

Malloc (выделение памяти двумерному массиву) - проверить код
Здравствуйте, подскажите пожалуйста, есть ли логические ошибки в блоке &quot;Выделения памяти:&quot;? План...

Как правильно объявить двумерный динамический массив через malloc
Подскажите как правильно объявить двумерный динамический массив через malloc типа инт размером...

Используя malloc и realloc создать двумерный динамический массив
Используя malloc и realloc, помогите написать часть кода для ввода массива строк,количество строк и...

Ошибки при выделении (освобождении) динамической памяти
Несложная программа, реализующая алгоритмы поиска строки и подстроки в массиве строк(здесь...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru