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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
#1

ошибка с выделением памяти - C++

09.06.2009, 13:03. Просмотров 1696. Ответов 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();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 15:39  [ТС]     ошибка с выделением памяти #21
вот
Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
09.06.2009, 15:46     ошибка с выделением памяти #22
Проверь, кажись считает:

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
#include <conio.h>
#include <STDLIB.H>
#include <malloc.h>
#include <stdio.h>
 
void proc_sum();
int main()
{
                proc_sum();
                getch();
                return 0;
}
void proc_sum()
{
                float *mas;
                float temp, rez=0;
                int i=0, len,j;
                mas = new float [1];
               
                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++;
 
                    realloc(mas,i*sizeof(float));
 
                    len = i;
                }
 
                j = len-1;
 
                rez = 0;
 
                for(i=0;i<len,j>=0;i++)
                {
                                rez+=mas[i]*mas[j];
                                j--;
                }
 
                delete [] mas;
                printf("\n\t summ= %f",rez);
                getch();
}
PS. читай внимательно документацию к функциям

Добавлено через 3 минуты 18 секунд
Тестировал на 4-х значениях: 1,2,3,4 в ответе получил 20
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 15:47  [ТС]     ошибка с выделением памяти #23
Lerikh, неа.... считает неправильно плюс пишет каждый раз после вывода суммы следующе:
null pointer assigment
Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
09.06.2009, 15:51     ошибка с выделением памяти #24
странно... а ты сколько значений вводишь? какие, и что должно получиться?
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 15:52  [ТС]     ошибка с выделением памяти #25
вводил тоже 1,2,3,4 - 20 не оплучалось.. хотя в моей последней версии -что ф выложил -как раз получаетсья....
в твоей на выходе 0..
если ввожу 1,2,3,4,5 - получаю 9..ужас=)
у меня не лучше в этом случае
Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
09.06.2009, 15:55     ошибка с выделением памяти #26
ты всякую фигню получаешь из-за того, что в массиве нечётное количество элементов. Согласно твоей формуле там должно быть всегда чётно(!)
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
09.06.2009, 15:57     ошибка с выделением памяти #27
Вот... у меня работает...
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
#include <conio.h>
#include <STDLIB.H>
#include <malloc.h>
#include <stdio.h>
 
void proc_sum();
int main()
{
       
        proc_sum();
        getch();
        return 0;
}
void proc_sum()
{
        float *mas;
        float temp = 1, rez=0;
        int i = 0, len,j;
        mas = (float *)malloc(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;
                mas = (float *)realloc(mas,(i+1)*sizeof(float));
                mas[i++]=temp;
 
        }
        len=j=i - 1;
        for(i = 0;i <=len;i++)
        {
                rez=rez+mas[i]*mas[j];
                j--;
        }
 
        free(mas);
        printf("\n\t Summ= %f",rez);
        getch();
}
Если не получится и введенные значения теряться опять будут... как вариант можно копирывать все в переменный массив...

Добавлено через 54 секунды
Цитата Сообщение от Lerikh Посмотреть сообщение
ты всякую фигню получаешь из-за того, что в массиве нечётное количество элементов. Согласно твоей формуле там должно быть всегда чётно(!)
Это еще почему ?????
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 15:57  [ТС]     ошибка с выделением памяти #28
Lerikh,
когда вожу 1,2,3,4,5,6 -получается еще хлеще
Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
09.06.2009, 15:59     ошибка с выделением памяти #29
так нашёл косяк... вот новый код:

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
#include <conio.h>
#include <STDLIB.H>
#include <malloc.h>
#include <stdio.h>
 
void proc_sum();
int main()
{
                proc_sum();
                getch();
                return 0;
}
void proc_sum()
{
                float *mas;
                float temp, rez=0;
                int i=0, len,j;
                mas = new float [1];
               
                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++;
 
                    realloc(mas,i*sizeof(float));
 
                    len = i;
                }
 
                j = len-1;
 
                rez = 0;
 
                for(i=0;i<len,j>=0;i++)
                {
                                rez+=mas[i]*mas[j];
                                j--;
                }
 
                //free(mas); пока в коммент
                printf("\n\t summ= %f",rez);
                getch();
}
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 16:01  [ТС]     ошибка с выделением памяти #30
FunDuck, огромедное спасибо!! все пашет правильно... в чем была моя ошибка не подскажешь на последок? якод то посомтрю, но ты на словах -с твой точки зрения
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
09.06.2009, 16:07     ошибка с выделением памяти #31
Ну по-моему ты mas изначально не правильно определял... у тебя изначально выделялось i*sizeof(float) памяти... а i = 0... то есть ты память вообще не выделял...
Evg
Эксперт CАвтор FAQ
17379 / 5617 / 350
Регистрация: 30.03.2009
Сообщений: 15,391
Записей в блоге: 26
09.06.2009, 16:14     ошибка с выделением памяти #32
Цитата Сообщение от FunDuck Посмотреть сообщение
Ну по-моему ты mas изначально не правильно определял... у тебя изначально выделялось i*sizeof(float) памяти... а i = 0... то есть ты память вообще не выделял...
ЗАЧОТ!
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 16:18  [ТС]     ошибка с выделением памяти #33
FunDuck, ну это я сразу спалил.... согласен очень глупо.
но это я исправил срау. а вот чего потом свистопляска
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
09.06.2009, 16:27     ошибка с выделением памяти #34
А вот чего потом было не знаю... я только изначальный код видел....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2009, 16:30     ошибка с выделением памяти
Еще ссылки по теме:

C++ Работа со строками и выделением памяти
C++ Задача на строки с выделением памяти
C++ Описать класс Строка с динамическим выделением памяти
C++ Динамическое выделением памяти для массивов
C++ Сравнение двух строк с выделением динамической памяти - C++

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

Или воспользуйтесь поиском по форуму:
Акелла
Сонный металюга
45 / 45 / 6
Регистрация: 10.05.2009
Сообщений: 295
09.06.2009, 16:30  [ТС]     ошибка с выделением памяти #35
FunDuck, а, ну ладно, всеравно огромное спаисбо и тебе, и все кто принимал участие -кому смог расставил спасибо -изв что не омгу несколько штук=)
Yandex
Объявления
09.06.2009, 16:30     ошибка с выделением памяти
Ответ Создать тему
Опции темы

Текущее время: 19:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru