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

Простая задачка, но туплю, помогите найти ошибку с new. - C++

Восстановить пароль Регистрация
 
a6657203
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
09.10.2011, 12:48     Простая задачка, но туплю, помогите найти ошибку с new. #1
Написано в C++ Builder 6, для решения конкретного уравнения. Вводить число 0.3. Выдаёт ошибку в строке:
C++
1
float *temp=new float[count+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
66
67
68
69
70
71
72
73
#include <stdio.h>
#include <math.h>
#pragma argsused
 
float* koef(float delta){
  float *k=new float[3];
  k[0]=1;
  k[1]=3*(2+delta);
  k[2]=(11+12*delta+3*(delta*delta));
  k[3]=(delta*delta*delta+6*delta+11*delta+6);
  return k;
}
bool fsign(float x, float *kf){
  return (pow(x,3)-kf[1]*pow(x,2)+kf[2]*x-kf[3]) > 0;
}
float* analit(float a, float b, float *kf){
  bool prev=fsign(a,kf);
  float *sq=NULL;
  float i=a+0.2;
  int count=0;
  while(i<=b){
    if(prev!=fsign(i,kf)){
      float *temp=new float[count+1]; //Тут ошибка
      int j;
      for(j=0;j<=count;j++)  *(temp+j)=*(sq+j);
      delete[] sq;
      sq=temp;
      count++;
      sq[count]=i;
      *(sq+count+1) = NULL;
      prev=fsign(i,kf);
/*
      float *temp=sq;
      sq=new float[count+1];
      int j;
      for(j=0;j<=count;j++) *(sq+j)=*(temp+j);
      *(sq + j++) = NULL;
      delete temp;
      count++;
      sq[count]=i;
      prev=fsign(i,kf);
*/
    }
    i+=0.2;
  }
  return sq;
}
 
int main(){
  float delt, a, b;
  float *kf=NULL;
  int i;
  puts("Vvedite delta\n");
  scanf("%f", &delt);
 
  kf=koef(delt);
 
  float maxA1=0, maxA2=0; //max pervih i vtorih koef
  for(i=0;i<4;i++){
    if(i<3 && maxA1<kf[i])    maxA1=kf[i];
    if(i!=0 && maxA2<kf[i])    maxA2=kf[i];
  }
 
  //otrezki a<=|z|<=b
  a=fabs(kf[3])/( fabs(maxA1)+fabs(kf[3]) );
  b=1+( fabs(maxA2)/fabs(kf[0]) );
 
  float *sq=analit(-1*a,b,kf);
 
  delete[] kf;
  delete[] sq;
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2011, 12:48     Простая задачка, но туплю, помогите найти ошибку с new.
Посмотрите здесь:

Простая задача, помогите найти макс. элементы в матрице C++
C++ Простая программа. Высчитать формулу. Нужно найти ошибку
C++ Простая задачка на C++
C++ Простая программка (найти ошибку в коде)
C++ Задачка.Нужно найти ошибку
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.10.2011, 12:56     Простая задачка, но туплю, помогите найти ошибку с new. #2
Цитата Сообщение от a6657203
C++
1
float *k=new float[3];
четыре элемента должно быть
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
09.10.2011, 12:57     Простая задачка, но туплю, помогите найти ошибку с new. #3
да ошибка там
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.10.2011, 12:58     Простая задачка, но туплю, помогите найти ошибку с new. #4
Цитата Сообщение от a6657203
C++
1
2
for(j=0;j<=count;j++)  *(temp+j)=*(sq+j);
delete[] sq;
на первом шаге sq равно NULL
a6657203
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
09.10.2011, 12:59  [ТС]     Простая задачка, но туплю, помогите найти ошибку с new. #5
Почему? Поясните пожалуйста про 4 элемента.

И без NULL не работает.

О, при 4-х элементах ошибку выдавать перестало. Про NULL снимается. Спасибо.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.10.2011, 13:08     Простая задачка, но туплю, помогите найти ошибку с new. #6
Цитата Сообщение от a6657203
Почему? Поясните пожалуйста про 4 элемента.
потому что 0 1 2 3 - это четыре цифры

Цитата Сообщение от a6657203
И без NULL не работает.
у тебя там сначала разыменование нулевого указателя - уже должна выпасть программа
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2011, 13:13     Простая задачка, но туплю, помогите найти ошибку с new.
Еще ссылки по теме:

C++ Простая задачка
Найти ошибку и задачка C++

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

Или воспользуйтесь поиском по форуму:
a6657203
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
09.10.2011, 13:13  [ТС]     Простая задачка, но туплю, помогите найти ошибку с new. #7
Цитата Сообщение от accept Посмотреть сообщение
Почему? Поясните пожалуйста про 4 элемента.
Еще раз благодарю. Почемуто решил, что 3 = 0 1 2 3
Yandex
Объявления
09.10.2011, 13:13     Простая задачка, но туплю, помогите найти ошибку с new.
Ответ Создать тему
Опции темы

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