Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
a6657203
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
#1

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

09.10.2011, 12:48. Просмотров 372. Ответов 6
Метки нет (Все метки)

Написано в 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2011, 12:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Простая задачка, но туплю, помогите найти ошибку с new. (C++):

Простая программка (найти ошибку в коде) - C++
Не могу понять в чем проблема #include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; class ARR {

Найти ошибку и задачка - C++
Добрый день, есть задачки, связанные с С++ Требуется удостовериться в их правильном решении. 1. Найдите ошибки в фрагменте кода....

Простая программа. Высчитать формулу. Нужно найти ошибку - C++
Помогите, пожалуйста, исправить ошибку в программе. Вроде задал всё верно, но с подсчётом перовой формулы выходит совсем не то, что на...

Задачка.Нужно найти ошибку - C++
Изначальное условие задачи: Составить программу поисков всех чисел палиндромов до n(n вводится с клавиатуры), которые при возведение в...

Простая задача, помогите найти макс. элементы в матрице - C++
Есть матрица, необходимо найти максимальный элемент, встречающийся более одного раза. Максимальный элемент нашел (с помощью встроенной...

Простая задачка - C++
Нужен код для Dev C++ Найти суму цифр четырёхзначного натурального числа. Буду очень благодарен.

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

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

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

Цитата Сообщение от a6657203
И без NULL не работает.
у тебя там сначала разыменование нулевого указателя - уже должна выпасть программа
1
a6657203
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
09.10.2011, 13:13  [ТС] #7
Цитата Сообщение от accept Посмотреть сообщение
Почему? Поясните пожалуйста про 4 элемента.
Еще раз благодарю. Почемуто решил, что 3 = 0 1 2 3
0
09.10.2011, 13:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2011, 13:13
Привет! Вот еще темы с ответами:

простая задачка - C++
Требуется написать программу, определяющую количество символов до точки. Точка в строке одна.

Простая задачка в СИ++ - C++
Найти колл-во цифр больше 9, у натурального числа N.:wall:

Простая задачка на C++ - C++
s=sin x + sin x^2 + sin x^3 + sin x^4 + ... + sin x^n - условие, а что как с этим делать я не понимаю, т.к. нам тупо раздали задание и...

Простая задачка - C++
Здравствуйте. Есть вот такая задачка: Написать программу на С пораждающая в цикле следующюю таблицу значений: A A+2 A+4 A+6 3 5 7 9 ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.