Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2010, 03:46   #1
kolob2000
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 23
Вопрос Проблема с указателями в цикле

Привет всем !
Выполняю лабораторные работы с указателями и после каомпиляции программа выдаёт сообщение о том что память по указаному адресу не может быть прочитана.
Посмотрите что не так в тексте,вот исходник:


Код:
#include <cstdio>
#include <cmath>
int main(){
    double a, b, c ;
    double N, K, S;
    double F;
    double a1,b1,c1,F1;
    double* ac= new double ;
    double* bc = new double;
    double* cc = new double;
    double* Fc = new double;
    printf("vvedite diapozon i shag:\n");
    scanf("%lf",&N);
    scanf("%lf",&K);
    scanf("%lf",&S);
    printf("vvedite a,b,c:\n");
     scanf("%lf",&a);
      scanf("%lf",&b);
       scanf("%lf",&c);
    printf("a=%9.2lf,b=%9.2lf,c=%9.2lf,\n\
           Xn=%9.2lf,Xk=%9.2lf,Xk=%9.2lf\n",a,b,c,N,K,S);
    printf("|   X   |  Fdest | Fcel  |\n");
    for(double x = N; x <= K; x += S){
               if(((x+5)<0) && (c=0)) F= (1/(a*x)-b);
               else 
               if (((x+5)>0) && (c != 0)) F=((x-a)/x);
               else ((10*x)/(c-4));
               a1 = a;
               b1 = b;
               c1 = c;
               F1 = F;
               double modf(double a1,double* ac);
               double modf(double b1,double* bc);
               double modf(double c1,double* cc);
               double modf(double F1,double* Fc);
               double ac1 = *ac;
               double bc1 = *bc;
               double cc1 = *cc;
               double Fc1 = *Fc;
               if (((*ac && *bc) || (*bc && *cc)) !=0)
               printf("|  %9.2lf  |  %9.2lf  |   -   |\n",x,F);
                  else
                  printf("|  %9.2lf  |   -   |  %9.2lf  |\n",x ,Fc1);
               delete ac;
               delete bc;
               delete cc;
               delete Fc;
               }
               printf("Will enter key for end");
               scanf("%lf",&a);
               return 0;
               }

Последний раз редактировалось Stilet; 25.03.2010 в 08:50.
kolob2000 вне форума Ответить с цитированием
Старый 25.03.2010, 07:48   #2
skrudjmagdak
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 33
По умолчанию

kolob2000, У меня все работает. Как эта прога работает(что она делает). Потому что пока разберешься что она должна делать хочется закрыть и не смотреть, пожалуйста указывайте что данный программа должна делать.

Какие вы вводили данные? Единственная у меня была проблема - это библиотеки. пропишите библиотеки так:
Код:
#include<stdio.h>
#include<conio.h>
#include<math.h>
должно работать. У меня все ок.

И еще. совсем не обязательно писать так:
int main(){
...
return 0;}

можно просто написать:
void main(){
...
}

Последний раз редактировалось Stilet; 25.03.2010 в 08:51.
skrudjmagdak вне форума Ответить с цитированием
Старый 25.03.2010, 09:13   #3
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Если пишите на стандартном C++, то пишите
Код:
int main()
{
//...
//return не обязателен
}
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 25.03.2010, 15:20   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

это чистый си
NiCola999 вне форума Ответить с цитированием
Старый 25.03.2010, 15:24   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2NiCola999
это плюсы. 3 фактора на это указывают

Код:
 for(double x = N; x <= K; x += S){
               if(((x+5)<0) && (c=0)) F= (1/(a*x)-b);
               else 
               if (((x+5)>0) && (c != 0)) F=((x-a)/x);
               else ((10*x)/(c-4));
               a1 = a;
               b1 = b;
               c1 = c;
               F1 = F;
               double modf(double a1,double* ac);
               double modf(double b1,double* bc);
               double modf(double c1,double* cc);
               double modf(double F1,double* Fc);
               double ac1 = *ac;
               double bc1 = *bc;
               double cc1 = *cc;
               double Fc1 = *Fc;
               if (((*ac && *bc) || (*bc && *cc)) !=0)
               printf("|  %9.2lf  |  %9.2lf  |   -   |\n",x,F);
                  else
                  printf("|  %9.2lf  |   -   |  %9.2lf  |\n",x ,Fc1);
               delete ac;
               delete bc;
               delete cc;
               delete Fc;
               }
               printf("Will enter key for end");
               scanf("%lf",&a);
               return 0;
               }
господи...
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 25.03.2010, 15:39   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

а... да перегрузку ф-ий не заметил) ой да там еще и new и delete =)

жесть у вас тут какая-то
Код:
#include <cstdio>
#include <cmath>
int main(){
    double a, b, c ;
    double N, K, S;
    double F;
    double a1,b1,c1,F1;
    double* ac= new double ;
    double* bc = new double;
    double* cc = new double;
    double* Fc = new double;
    printf("vvedite diapozon i shag:\n");
    scanf("%lf",&N);
    scanf("%lf",&K);
    scanf("%lf",&S);
    printf("vvedite a,b,c:\n");
     scanf("%lf",&a);
      scanf("%lf",&b);
       scanf("%lf",&c);
    printf("a=%9.2lf,b=%9.2lf,c=%9.2lf,\n\
           Xn=%9.2lf,Xk=%9.2lf,Xk=%9.2lf\n",a,b,c,N,K,S);
    printf("|   X   |  Fdest | Fcel  |\n");
    for(double x = N; x <= K; x += S){
               if(((x+5)<0) && (c=0)) F= (1/(a*x)-b);
               else 
               if (((x+5)>0) && (c != 0)) F=((x-a)/x);
               else ((10*x)/(c-4));
               a1 = a;
               b1 = b;
               c1 = c;
               F1 = F;
               double modf(double a1,double* ac);
               double modf(double b1,double* bc);
               double modf(double c1,double* cc);
               double modf(double F1,double* Fc);
               double ac1 = *ac;
               double bc1 = *bc;
               double cc1 = *cc;
               double Fc1 = *Fc;
               if (((*ac && *bc) || (*bc && *cc)) !=0)
               printf("|  %9.2lf  |  %9.2lf  |   -   |\n",x,F);
                  else
                  printf("|  %9.2lf  |   -   |  %9.2lf  |\n",x ,Fc1);
               delete ac;
               delete bc;
               delete cc;
               delete Fc;
               }
               printf("Will enter key for end");
               scanf("%lf",&a);
               return 0;
               }
вы выделяете память, а затем в цикле её освобождаете, и используете освобожденную память на следующих итерациях. Потом зачемто в цикле обьявляете 4 прототипа функции

у вас память освободилась на 1 итерации, следовательно ею может воспользоваться любой другой процесс, отсюда ошибка доступа

Последний раз редактировалось NiCola999; 25.03.2010 в 15:51.
NiCola999 вне форума Ответить с цитированием
Старый 25.03.2010, 16:03   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2NiCola999
к 3-м факторам я причислял хидеры, new/delete и объявление переменной в описании цикла)
а выделенное - для автора, какой бред он написал)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 26.03.2010, 00:54   #8
kolob2000
Пользователь
 
Регистрация: 27.03.2009
Сообщений: 23
По умолчанию

С освобождением памяти всё ясно ,сейчас исправил заработало всё.
А то что Бред мне и самому ясно,но это всё дело времени .
kolob2000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема в цикле Fekla Общие вопросы C/C++ 4 28.06.2009 12:50
[Pascal] Проблема с указателями Arkuz Помощь студентам 20 30.05.2009 23:52
Проблема с указателями 3D Hunter Общие вопросы Delphi 8 14.03.2009 06:55
проблема с указателями =\ shad0w Общие вопросы C/C++ 9 09.12.2007 03:36
Проблема с указателями novicer Общие вопросы Delphi 5 17.06.2007 00:21