Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
75 / 26 / 22
Регистрация: 22.06.2013
Сообщений: 127

Странный баг с переменной типа double**

21.04.2014, 14:50. Показов 1626. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Короче я вообще не пойму в чем проблема, этот код:
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
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
   int i=0,j=0, k=0;
   int N, K;
   double *x, *y, **sums;
   StringGrid1->Cells[1][1]=3;
   StringGrid1->Cells[2][1]=4;
   StringGrid1->Cells[1][2]=4;
   StringGrid1->Cells[2][2]=6;
   StringGrid1->Cells[1][3]=6;
   StringGrid1->Cells[2][3]=7;
   K=2;
   N=1;
 
   x = new double[N];
   y = new double[N];
   sums = new double *[K+1];
   for(i=0; i<K+1; i++)
      sums[i] = new double[K+1];
 
   for(i=0; i<K+1; i++)
      for(j=0; j<K+1; j++)
         sums[i][j] = 0;
 
   i=0,j=0, k=0;
   for(k=1; k<N+1; k++)
   {
      x[k] = StrToFloat(StringGrid1->Cells[1][k]);
      y[k] = StrToFloat(StringGrid1->Cells[2][k]);  //*/
   }
   for(i=0; i<K+1; i++)
   {
      for(j=0; j<K+1; j++)
      {
         double ij = i+j;
          sums[i][j] = 0;   //Вылет
          for(k=0; k<N; k++)
             sums[i][j] += pow(x[k], ij);
      }
   }
}
Вылетает на строке: sums[i][j] = 0; (36я)
Странность в том, что если закомментировать строки:
x[k] = StrToFloat(StringGrid1->Cells[1][k]);
y[k] = StrToFloat(StringGrid1->Cells[2][k]);
которые вообще никакого отношения к переменной sums не имеют, то вылета на этой строке не происходит.
Помогите разобраться.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.04.2014, 14:50
Ответы с готовыми решениями:

Теряется точность переменной типа double
Вот код: double StepC = 0.001, g_C; for ( double c = StepC; c &lt;= 3; c += StepC ) { //...

Ошибка в цикле с переменной double
Вкратце суть вопроса. Есть переменные double ch; double start, finish, tab; Переменным присваиваем значения

Операции с элементами типа Double
Здравствуйте, такая проблема: Написал программу для работы с комплексными числами. В ней есть арифметические операции. Два комплексным...

7
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
21.04.2014, 15:03
попробуйте использовать
C++
1
StrToFloatDef()
ну просто для проверки....
0
75 / 26 / 22
Регистрация: 22.06.2013
Сообщений: 127
21.04.2014, 15:06  [ТС]
Попробовал, ничего не изменилось.
Билдер шестой у меня, на всякий случай.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
21.04.2014, 15:11
Лучший ответ Сообщение было отмечено volvo как решение

Решение

plapteshk, в 28/29 строках у тебя явный вылет за пределы массива, откуда совершенно ожидаемое AV (при k == N). Исправь и попробуй запустить программу еще раз.
1
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
21.04.2014, 15:20
У меня тут ругается
C++
1
2
 for(k=0; k<N; k++){
 sums[i][j] += pow(x[k],ij);
потому что k не может быть рано 0.
1
75 / 26 / 22
Регистрация: 22.06.2013
Сообщений: 127
21.04.2014, 15:30  [ТС]
Да, действительно. Я исправил строки следующим образом:
C++
1
2
3
4
5
for(k=0; k<N; k++)
   {
      x[k] = StrToFloatDef(StringGrid1->Cells[1][k+1],0);
      y[k] = StrToFloatDef(StringGrid1->Cells[2][k+1],0);  //*/
   }
Вылетов не происходит.

Добавлено через 6 минут
Хотя я так и не понял, почему он вылетел на 36 строке, а не на 28й.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
21.04.2014, 17:17
Цитата Сообщение от plapteshk Посмотреть сообщение
почему он вылетел на 36 строке, а не на 28й.
Потому что это тебе не Паскаль, где есть контроль границ. А С++, который просто напросто испортил тебе память, и при попытке обращения к испорченной памяти ты получил то, что получил... CodeGuard-ом пользоваться надо, он быстро вычислил бы, где проблема, и при попытке обратиться к x[N] выдал бы "Access Overrun"
0
75 / 26 / 22
Регистрация: 22.06.2013
Сообщений: 127
21.04.2014, 17:39  [ТС]
Вылет случился именно на строке sums[i][j] = 0; Вот что я посчитал странным, ведь эта строка не отностится к испорченной памяти.

Добавлено через 6 минут
Так, возможно я догадался в чём дело, эти переменные: double *x, *y, **sums; друг за другом записаны в памяти... тогда всё становится ясно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.04.2014, 17:39
Помогаю со студенческими работами здесь

Получить из StringGrid массив типа double
Обясните пожалуста ,как получить из StringGrid массив типа double **a допустим(a).Заранее благодарен

Default для типа double в свойстве
Доброго времени суток. Столкнулся с задачей написания компонента, одним из свойств которого является переменная типа double. Не могу...

Замена символа x в строке на число типа double
У меня есть строка типа string. Я пытаюсь подставить на место x в строке число типа double (chislo). например str = &quot;(x-1)&quot;;...

Вызов переменной типа int и типа double из нескольких форм
У меня такой случай: мне нужно из вызвать переменные типа double (double RDW = 0.0; RDW = Convert.ToInt32(textBox2.Text);) в Form10 из...

Передача переменной типа double из c# в переменную типа float в SQL
Здравствуйте, имеется проблема с передачей данных из кода c# в бд SQL Имеется переменная типа double, к примеру double newPrice =...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru