0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
1

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

09.10.2011, 12:48. Показов 581. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2011, 12:48
Ответы с готовыми решениями:

Простая задачка. ПОМОГИТЕ!!!
Здравствуйте. Я очень плохо знаю AVR Studyo, но по учебе задали задачку решить, а я не знаю как.((...

простая задачка , но сложная для меня, помогите плз)
Ввести n строк с консоли. Упорядочить и вывести строки в порядке возрастания их длин, а также...

найти сумму (простая задачка)
Найти сумму 2^2+2^3+2^4+2^n (n вводится с клавиатуры). Операцию возведения в степень не...

Простая задачка: Найти потребляемую мощность автоответчика
Автоответчик получает питание через телефонную линию. Сопротивление линии 1000 Ом. Найти...

6
4864 / 3286 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
09.10.2011, 12:56 2
Цитата Сообщение от a6657203
C++
1
float *k=new float[3];
четыре элемента должно быть
1
28 / 29 / 5
Регистрация: 17.10.2009
Сообщений: 739
09.10.2011, 12:57 3
да ошибка там
0
4864 / 3286 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
09.10.2011, 12:59  [ТС] 5
Почему? Поясните пожалуйста про 4 элемента.

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

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

Цитата Сообщение от a6657203
И без NULL не работает.
у тебя там сначала разыменование нулевого указателя - уже должна выпасть программа
1
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 4
09.10.2011, 13:13  [ТС] 7
Цитата Сообщение от accept Посмотреть сообщение
Почему? Поясните пожалуйста про 4 элемента.
Еще раз благодарю. Почемуто решил, что 3 = 0 1 2 3
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2011, 13:13
Помогаю со студенческими работами здесь

(Не)простая последовательность. Найти ошибку в коде
Задача Написать программу, которая распечатывает 20 членов случайной последовательности,...

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

Туплю в СИ, Помогите !!!
Изучаю СИ уже второй день :). На ассемблере написал уже много-чего. Т.е. его понимаю достаточно...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru