Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
Сонный металюга
 Аватар для Акелла
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295

Ошибка с выделением памяти

09.06.2009, 13:03. Показов 2978. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
выдает ошибку в выделении памяти. никто не подскажет почему?
если что -задача звучит так примерно
вводим веественные числа пока не попадетсья ноль занося их в динамический массив, как тока ноль - посчитываем сумму путем - перемножаем сначала первый и последний элементы, к ним прибавляем произведение второго и предпоследнего и так пока не обойдем массив (т.е. последними прибавяться вновь произведения первого и последнгео)

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
#include <conio.h>
#include <STDLIB.H>
#include <ALLOC.H>
#include <stdio.h>
 
void proc_sum();
int main()
{
    clrscr();
    proc_sum();
    getch();
    return 0;
}
void proc_sum()
{
    float *mas;
    float temp, rez=0;
    int i=0, len,j;
    mas = (float *)calloc(i, sizeof(float));
    if(!mas)
    {
        printf("\n\t Memmory Error!");
        exit(1);
    }
    while(temp!=0)
    {
        printf("\n\t Enter nomder: ");
        scanf("%f",&temp);
 
        if (temp==0) break;
        i++;
        mas = (float *)realloc(mas,i);
        mas[i-1]=temp;
 
    }
    len=j=i;
    for(i=0;i<=len;i++)
    {
        rez=rez+mas[i]*mas[j];
        j--;
    }
 
    free(mas);
    printf("\n\t Summ= %f",rez);
    getch();
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.06.2009, 13:03
Ответы с готовыми решениями:

Ошибка в коде с выделением памяти
Не могу понять, в чем проблема? double** FuzzySet::operator&amp;&amp;(FuzzySet* _set) { int k = _set-&gt;set.size(); double** R =...

Проблема с выделением памяти
Всем привет! Нужна помощь. Создаю класс и при компиляции возникает ошибка. Не пойму причину. Помогите пожалуйста. Конструктор должен...

Проблемы с выделением памяти
Здравствуйте. Есть контейнер QList &lt;Node *&gt; В Node свой QList &lt;Node *&gt;. Строю программное дерево разбора выражение. На небольших...

34
692 / 383 / 51
Регистрация: 22.01.2009
Сообщений: 1,135
09.06.2009, 13:15
C++
1
mas = (float *)realloc(mas,i*sizeof(float));
1
Сонный металюга
 Аватар для Акелла
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 13:17  [ТС]
тут ошибку спалил... теперь код выглядит так:

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
#include <conio.h>
#include <STDLIB.H>
#include <ALLOC.H>
#include <stdio.h>
 
void proc_sum();
int main()
{
    clrscr();
    proc_sum();
    getch();
    return 0;
}
void proc_sum()
{
    float *mas;
    float temp, rez=0;
    int i=0, len,j;
    mas = (float *)calloc(1, sizeof(float));
    if(!mas)
    {
        printf("\n\t Memmory Error!");
        exit(1);
    }
    while(temp!=0)
    {
        printf("Enter nomder: ");
        scanf("%f",&temp);
 
        if (temp==0) break;
        else mas[i]=temp;
        i++;
        mas = (float *)realloc(mas,(i+1));
 
 
    }
    len=j=i;
    for(i=0;i<=len;i++)
    {
        rez=rez+mas[i]*mas[j];
        j--;
    }
 
    free(mas);
    printf("\n\t Summ= %f",rez);
    getch();
}
но теперь сумму он не считает=(
0
692 / 383 / 51
Регистрация: 22.01.2009
Сообщений: 1,135
09.06.2009, 13:25
C++
1
len=j=i - 1;
0
Сонный металюга
 Аватар для Акелла
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 13:30  [ТС]
не катит=( выдает ахинею в виде суммы.
0
692 / 383 / 51
Регистрация: 22.01.2009
Сообщений: 1,135
09.06.2009, 13:32
C++
1
mas = (float *)realloc(mas,(i+1));
эта строка так и осталась?
0
Сонный металюга
 Аватар для Акелла
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 13:38  [ТС]
даа
0
692 / 383 / 51
Регистрация: 22.01.2009
Сообщений: 1,135
09.06.2009, 13:43
Меняй на эту!!:
C++
1
mas = (float *)realloc(mas,i*sizeof(float));
Иначе в сумму числа за пределами массива попадать будут.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2009, 13:45
Цитата Сообщение от Акелла Посмотреть сообщение
даа
Та же ошибка, что и в посте #2

Добавлено через 40 секунд
Цитата Сообщение от FunDuck Посмотреть сообщение
Меняй на эту!!:
C++
1
mas = (float *)realloc(mas,i*sizeof(float));
Иначе в сумму числа за пределами массива попадать будут.
По его логике вместо "i" должно быть "i+1"
0
Сонный металюга
 Аватар для Акелла
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 13:51  [ТС]
FunDuck, изменил как ты показал, теперь в качестве суммы выдаеться последний элемент.
может у меня в другом ошибка?
0
692 / 383 / 51
Регистрация: 22.01.2009
Сообщений: 1,135
09.06.2009, 14:03
Странно... вроде правильно работает...
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
#include <conio.h>
#include <STDLIB.H>
#include <ALLOC.H>
#include <stdio.h>
 
void proc_sum();
int main()
{
        //clrscr();
        proc_sum();
        getch();
        return 0;
}
void proc_sum()
{
        float *mas;
        float temp, rez=0;
        int i=0, len,j;
        mas = (float *)calloc(1, sizeof(float));
        if(!mas)
        {
                printf("\n\t Memmory Error!");
                exit(1);
        }
        while(temp!=0)
        {
                printf("Enter nomder: ");
                scanf("%f",&temp);
 
                if (temp==0) break;
                else mas[i]=temp;
                i++;
                mas = (float *)realloc(mas,i*sizeof(float));
 
 
        }
        len=j=i;
        for(i=0;i<len;i++)
        {
                rez=rez+mas[i]*mas[j];
                j--;
        }
 
        free(mas);
        printf("\n\t Summ= %f",rez);
        getch();
}
Насколько я понял прога должна выводить сумму элементов умноженную на последний...?
1
Сонный металюга
 Аватар для Акелла
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:10  [ТС]
нет, она должна выводить сумму:
первый*последний + второй* предпоследний +третий* предпредпоследний...последний*первый
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2009, 14:13
Перед 41-й строкой воткни печать i и j - у тебя там явная лажа. Да и вообще. Хоть немного напряги мозги
1
Сонный металюга
 Аватар для Акелла
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:17  [ТС]
Evg,
кхм... используя борланд, я пробегаю свою прогу функцие watch встроенной в компилятор - когда ввожу 4-ый по счету элемент, то значения предыдущих 3 (которые вполне нормально записались) куда то улетают, получаю в этих ячейках памяти что то левое. либо сдвигаются.

а на счет мозгов - раз написал, значит етсь -я же не прошу мне ее написать с нуля, а показать более опытных где у меня ошибка. если не можешь -нечего МНЕ про мозги говорить
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2009, 14:29
Цитата Сообщение от Акелла Посмотреть сообщение
а на счет мозгов - раз написал, значит етсь -я же не прошу мне ее написать с нуля, а показать более опытных где у меня ошибка. если не можешь -нечего МНЕ про мозги говорить
Не хотел тебя обидеть. Просто по этой теме и соседней ты очень похож на кучу товарищей, которые откуда-то передерут программу, она не работает, а дальше их надо водить за руку и диктовать изменение каждого байта. Если не так - приношу извинения

Тогда по существу - внутри цикла ввода воткни печать всех уже введённых элементов. Т.е. при вводе вторго числа печтатешь первое. При вводе третьего печатаешь первое и второе и т.п.
1
692 / 383 / 51
Регистрация: 22.01.2009
Сообщений: 1,135
09.06.2009, 14:29
Так делай...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
        while(temp!=0)
        {
                printf("Enter nomder: ");
                scanf("%f",&temp);
 
                if (temp == 0) break;
                else {
                    mas = (float *)realloc(mas,(i+1)*sizeof(float));
                    mas[i]=temp;
                }
                i++;
        }
        len=j=i - 1;
1
Сонный металюга
 Аватар для Акелла
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:41  [ТС]
FunDuck,
сделал.
сумму выдает ноль. в чем причина... ну вот тут действительно омзгов не хватает
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2009, 14:51
Перед тем, как считать свой результат, напиши ещё один цикл, который распечатает значение всех элементов массива. Опять-таки чтобы понять, косячит ввод или подсчёт суммы
1
Сонный металюга
 Аватар для Акелла
46 / 46 / 13
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 14:54  [ТС]
косячит ввод это омжно простым пошаговым просмотром увидеть. в любом компиляторе - я написал же:
Цитата Сообщение от Акелла Посмотреть сообщение
используя борланд, я пробегаю свою прогу функцие watch встроенной в компилятор - когда ввожу 4-ый по счету элемент, то значения предыдущих 3 (которые вполне нормально записались) куда то улетают, получаю в этих ячейках памяти что то левое. либо сдвигаются.
воот.. теперь стали вылезать только левые значения каждый раз после


Цитата Сообщение от FunDuck Посмотреть сообщение
if (temp == 0) break;
* * * * * * * * * * * * * * * * else {
* * * * * * * * * * * * * * * * * * * * mas = (float *)realloc(mas,(i+1)*sizeof(float));
* * * * * * * * * * * * * * * * * * * * mas[i]=temp;
* * * * * * * * * * * * * * * * }
* * * * * * * * * * * * * * * * i++;
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
09.06.2009, 15:14
А покажи ещё раз весь исходник. А то уже сложнопонять, что ты там наисправлял по отношению к исходному
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.06.2009, 15:14
Помогаю со студенческими работами здесь

Конструктор с выделением памяти
Среди всех данных есть указатель, память для которого выделяется в конструкторе, необходимый размер передается в параметрах конструктора....

Задача на строки с выделением памяти
Добрый вечер, помогите с задачкой Выводит на экран только строки, состоящие из заданного количества слов. Возвращает количество прочих...

Строки с выделением динамической памяти
Привет всем! Помогите решить вот такую задачу: Ввести две строки. Определить совпадение их слов (Первое слово 1 строки сравнить с первым...

Работа со строками и выделением памяти
Задание написать класс строк (что-то типа String). #define MAX 100 class ascii { private: char* str; int len; ...

Проблема с динамическим выделением памяти
Здравствуйте, проблема в следующем после ввода -1, происходит зависание програмы. Задача: Задача на динамическое выделение памяти....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru