Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/56: Рейтинг темы: голосов - 56, средняя оценка - 4.95
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661

Не работает scanf в цикле

23.12.2011, 03:20. Показов 11019. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
  int n,ip;
  printf("2-mernoe DPF\n");
  do {
  printf("\n 1-iz faila,  2-test,   0- Vixod\n");
  scanf("%d",&ip);
  if (ip==0) continue;
  if (ip==1) fileDPF();
  if (ip==2) testDPF();
           fflush(stdin);
    } while (ip!=0);
  return 0;
}
я рассчитывал на выход из цикла при вводе ip=0 (стандартное меню консольных программ)
Но получается фигня: 2й, 3й и следующие разы scanf просто не работает.
Т.е. значение ip остается=значению 1-го ввода. Естественно цикл крутится до бесконечности.
Наученный горьким опытом вставил fflush(stdin); в надежде доп.очистки входного потока,
но мертвому эти припарки не помогли.
Вот уж не ожидал такую гадость в простой проге
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.12.2011, 03:20
Ответы с готовыми решениями:

Scanf в цикле
#include<stdio.h> #include<stdlib.h> #include<math.h> int main() { int n,i,k; double a,r;

Не работает scanf
Здравствуйте! Необходимо описать массив структур и реализовать 4 функции: Добавление записи, Удаление записи, Вывод всех записей и...

Не работает scanf
#include <stdio.h> int main() { char c; int d; scanf_s("%c",&c); printf("%c", c); ...

21
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
23.12.2011, 03:29
попробуй убрать fflush и записать так
C
1
scanf("%d*c",&ip);
Добавлено через 2 минуты
кста строку 8 вообще убери
0
 Аватар для darkknight2008
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
23.12.2011, 03:32
Как ни странно, но ваш код у меня спокойно запустился и работает. Отмеченной ошибки не обнаружено. Если надо могу переделать код в более приличный вид...
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
23.12.2011, 03:39  [ТС]
C++
1
scanf("%d*c",&ip);
Ничего не перепутали?? Что означает *с в спецификации формата???
Попробовал - все то же осталось. Если вот так
C++
1
scanf("%d%c",&ip);
то валится на вводе

Добавлено через 2 минуты
ответ darkknight
работаю в консольном C++ Builder типа С++
на других форумах чего только не советовали - и scanf_c и _fflush(stdin)
эти функции у меня не поддерживаются!!!
0
 Аватар для darkknight2008
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
23.12.2011, 03:47
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
  int n,ip;
  printf("2-mernoe DPF\n");
  do {
  printf("\n 1-iz faila,  2-test,   0- Vixod\n");
  scanf("%d",&ip);
  if (ip==0) break;
  if (ip==1) fileDPF();
  if (ip==2) testDPF();
    } while (1);
  return 0;
}
Попробуй вот так. Еще есть вариант, что в функциях fileDPF, testDPF ты пишешь мимо массива(или т.п.) и этим самым гадишь стек вызова(и .т.п.).
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
23.12.2011, 03:49
Цитата Сообщение от eugrita Посмотреть сообщение
Ничего не перепутали??
нет
Цитата Сообщение от eugrita Посмотреть сообщение
Если вот так
а вот так не надо.
Цитата Сообщение от eugrita Посмотреть сообщение
на других форумах чего только не советовали - и scanf_c и _fflush(stdin)
эти функции у меня не поддерживаются!!!
и хорошо что не сработало, они ОС зависимые. Даже не знаю что сказать кроме как обратиться к документации компилятора. Я скомпилировал, запустил, работает. Может подскажет кто на венде работает.

Добавлено через 1 минуту
посмотрел бы дебагером...
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
23.12.2011, 03:51  [ТС]
Не помогло. По поводу функций testDPF() и FileDPF() - в них создается с помощью new 2-мерный
динамический массив. Причем delete[] там не стоит - работало и так.
Может в этом дело?
0
 Аватар для darkknight2008
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
23.12.2011, 03:54
Цитата Сообщение от eugrita Посмотреть сообщение
Может в этом дело?
Ты закоментируй ВЕСЬ код в функциях и тогда проверь программу, а потом отпишись.
И вообще, выложи весь проект вместе с функциями(можно в архивчике).
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
23.12.2011, 03:57
eugrita, ставь breakpoint'ы и смотри в отладчике значение ip, сразу все прояснится

Добавлено через 1 минуту
может так поможет, хотя вляд ли.
C
1
scanf("%i[^\n]",&ip);
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
23.12.2011, 04:10
а можно вас попросить ради собственного любопытсва, скомпилировать и запустить следующее:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main()
{
  int choice;
  do {
  printf("\n1-iz faila,  2-test,   0- Vixod\n");
  scanf("%d",&choice);
  if(choice == 1){
      printf("PRINT IZ FAILA");
  } else if(choice == 2 ){
      printf("PRINT TEST");
  }
    } while (choice!=0);
  return 0;
}
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
23.12.2011, 04:19  [ТС]
ну вот заглушил обе функции т.е. добавил 1-м оператором return
сразу все стало нормально.
Выкладываю код. (правда delete[] сейчас дает сбой по памяти почему-то) (раньше без него обходился
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <stdio.h>
 #include <conio.h>
 #include <math.h>
 #include <alloc.h>
struct ShortComplex
{ //äëÿ èìèòàöèè êîìïëåêñíîãî ÷èñëà (ñïåêòð)
 double re, im;
};
 
void dpf2(float **x,ShortComplex **X, int L1,int L2)
{//âû÷èñëåíèå ïðÿìîãî äèñêðåòíîãî ïðåîáðàçîâàíèÿ Ôóðüå
 //ïðÿìûì ìåòîäîì. ×èñëî îïåðàöèé ïîðÿäêà N*N
  double t;
  for (int k1=0;k1<L1;k1++) {
    for (int k2=0;k2<L2;k2++)
       {
        X[k1][k2].re=0;X[k1][k2].im=0;
        for (int i=0;i<L1;i++)
           for (int j=0;j<L2;j++)  {
         t=2.*M_PI*i*k1/L1+2.*M_PI*j*k2/L2;
         X[k1][k2].re+=x[i][j]*cos(t); X[k1][k2].im+=x[i][j]*sin(t);
                                   }
       }
                        }
 
}
 
void testDPF()
{//ôîðìèðóåò òåñòîâûé âðåìåííîé ñèãíàë x[i][j]=i åñëè i>L1/2,j>L2/2 äëÿ ÄÏÔ
//è âûïîëíÿåò ÄÏÔ, ðåçóëüòàò â ìàññèâå X
int L1,L2; //êîë-âî òî÷åê äèñêðåòèçàöèè ïî X è ïî Y
        return;
  printf("L1=?, L2=?\n");scanf("%i%i",&L1,&L2);
  float **x;  ShortComplex **X;
   *x=new float[L1]; *X=new ShortComplex[L1];
  for (int i=0;i<L1;i++)
    {x[i]=new float[L2]; X[i]=new ShortComplex[L2];}
  printf("x=\n");
  for (int i=0;i<L1;i++)  {
    for (int j=0;j<L2;j++)
    {
     if (i>=L1/2. && j>=L2/2.)x[i][j]=1;
     else x[i][j]=0;
     printf("%6.3f ",x[i][j]);
    }
     printf("\n");
                          }
  dpf2(x,X,L1,L2);   printf("\nSpectr X\n");
  for (int i=0;i<L1;i++)     {
    for (int j=0;j<L2;j++)
     {printf("(%7.4f %7.4f) ",X[i][j].re,X[i][j].im);}
    printf("\n");
                             }
  for (int i=0;i<L1;i++)
     {delete x[i]; delete X[i];}
    delete[]x; delete []X;
}
 
void fileDPF()
{//÷èòàåò òåñòîâûé âðåìåííîé ñèãíàë x[i][j] èç ôàéëà
 //è âûïîëíÿåò ÄÏÔ, ðåçóëüòàò â ìàññèâå X
      return;
 int L1,L2;
 FILE * f=fopen("dan.txt","r");
 if (f==NULL)
   {printf("faila dan.txt net\n"); return; };
 fscanf(f,"%i%i",&L1,&L2);
  if (L1<2 || L2<2)
    {printf("neverno L1 ili L2\n"); return; };
 float **x;  ShortComplex **X;
   *x=new float[L1]; *X=new ShortComplex[L1];
  for (int i=0;i<L1;i++)
   {x[i]=new float[L2]; X[i]=new ShortComplex[L2];}
  for (int i=0;i<L1;i++)  {
    for (int j=0;j<L2;j++)
    {
     if (i>=L1/2. && j>=L2/2.)x[i][j]=i;
     else x[i][j]=0;
     printf("%6.3f ",x[i][j]);
    }
     printf("\n");
                          }
  dpf2(x,X,L1,L2);   printf("\nSpectr X\n");
  for (int i=0;i<L1;i++)     {
    for (int j=0;j<L2;j++)
     {printf("Re=%7.4f Im=%7.4f\n",X[i][j].re,X[i][j].im);}
    printf("\n");
                             }
   for (int i=0;i<L1;i++)
     {delete x[i]; delete X[i];}
    delete[]x; delete []X;
}
int main()
{//ãëàâíàÿ ïðîãðàììà -âûçûâàåò ïî âûáîðó ïîëüçîâàòåëÿ ïðÿìîå èëè îáðàòíîå ïðåîáðàçîâàíèå
 //ïðÿìîå äëÿ ñèãíàëà x[i]=i; //îáðàòíîå äëÿ
  int n,ip;
  printf("2-mernoe DPF\n");
  do {
  printf("\n 1-iz faila,  2-test,   0- Vixod\n");
  scanf("%d",&ip);
  if (ip==1) fileDPF();
  if (ip==2) testDPF();
    } while (ip!=0);
  return 0;
}
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
23.12.2011, 04:32
eugrita, попробуйте проделать сказанные мной манипуляции с функциями fscanf, scanf в функциях testDPF, fileDPF. return означает вернуть значение, т.е. ваши функции не выполняются, выход из них происходит сразу же после входа. Отсюда заключаем что гадится stdin именно в них. Оперторы new\delete это плюсовые операторы, а ваш код полностью написан на Си и в стиле Си. Читать его практически невозможно... а выравнивать долго, потому и не читал.
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
23.12.2011, 04:39  [ТС]
ответ alkogolik
Хоть и стиль C, scanf у меня единственный в главной проге. Ваш прием там не помог.
у меня правда почему-то ошибка на динамическом уничтожении
C++
1
2
3
for (int i=0;i<L1;i++)
     {delete x[i]; delete X[i];}
  delete[]x; delete []X;//здесь ошибка!!!
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
23.12.2011, 04:47
eugrita, я вам позже скажу почему ошибка. сейчас во время коррекции кода поправил
0
 Аватар для S_A_L
8 / 8 / 3
Регистрация: 22.12.2011
Сообщений: 14
23.12.2011, 04:57
Цитата Сообщение от eugrita Посмотреть сообщение
в коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
  int n,ip;
  printf("2-mernoe DPF\n");
  do {
  printf("\n 1-iz faila,  2-test,   0- Vixod\n");
  scanf("%d",&ip);
  if (ip==0) continue;
  if (ip==1) fileDPF();
  if (ip==2) testDPF();
           fflush(stdin);
    } while (ip!=0);
  return 0;
}
я рассчитывал на выход из цикла при вводе ip=0 (стандартное меню консольных программ)
Но получается фигня: 2й, 3й и следующие разы scanf просто не работает.
Т.е. значение ip остается=значению 1-го ввода. Естественно цикл крутится до бесконечности.
Наученный горьким опытом вставил fflush(stdin); в надежде доп.очистки входного потока,
но мертвому эти припарки не помогли.
Вот уж не ожидал такую гадость в простой проге
Удалите из кода -- if ( ip == 0 ) continue;
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
23.12.2011, 05:15
читайте, пробуйте
код
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
 
struct ShortComplex
{
     //для имитации комплексного числа (спектр)
     double re, im;
};
 
void dpf2(float **x, ShortComplex **X, int L1,int L2)
{//вычисление прямого дискретного преобразования Фурье
 //прямым методом. Число операций порядка N*N
    double t;
 
    for ( int k1 = 0; k1 < L1; ++k1 )
        for ( int k2 = 0; k2 < L2; ++k2 ) {
 
            X[ k1 ][ k2 ].re = 0;
            X[ k1 ][ k2 ].im = 0;
 
            for ( int i = 0; i < L1; ++i )
                for (int j = 0; j < L2; ++j) {
                    t = 2. * M_PI * i * k1 / L1+2. * M_PI * j * k2 / L2;
                    X[ k1 ][ k2 ].re += x[ i ][ j ] * cos( t );
                    X[ k1 ][ k2 ].im += x[ i ][ j ] * sin( t );
                }
        }
}
 
void testDPF()
{//формирует тестовый временной сигнал x[i][j]=i если i>L1/2,j>L2/2 для ДПФ
//и выполняет ДПФ, результат в массиве X
    int L1, L2; //кол-во точек дискретизации по X и по Y
 
    printf( "L1=?, L2=?\n" );
    scanf( "%i%i", &L1, &L2 );
 
    float **x;
    ShortComplex **X;
    /***тут вы неверно выделяли память***/
    x = new float* [ L1 ]; 
    X = new ShortComplex* [ L1 ];
    
    /***тут были пропущены скобки***/
    for ( int i = 0; i < L1; ++i ) {
        x[ i ] = new float[ L2 ];
        X[ i ] = new ShortComplex[ L2 ];
    }
    printf("x=\n");
 
    for ( int i = 0; i < L1; ++i ) {
        for ( int j = 0; j < L2; ++j ) {
            if ( i >= L1/2. && j >= L2/2. )
                x[ i ][ j ] = 1.;
            else
                x[ i ][ j ] = 0;
            printf("%6.3f ",x[i][j]);
        }
        printf("\n");
    }
 
    dpf2( x, X, L1, L2 );
    printf( "\nSpectr X\n" );
 
    for ( int i = 0; i < L1; ++i ) {
        for ( int j = 0; j < L2; ++j )
            printf( "(%7.4f %7.4f) ", X[ i ][ j ].re, X[ i ][ j ].im);
        printf("\n");
    }
 
    for ( int i = 0; i< L1; ++i ) {
        delete x[ i ];
        delete X[ i ];
    }
    delete [] x;
    delete [] X;
}
 
void fileDPF()
{//читает тестовый временной сигнал x[i][j] из файла
 //и выполняет ДПФ, результат в массиве X
    int L1, L2;
    FILE * f = fopen( "dan.txt","r" );
    if ( f == NULL ) {
        printf( "faila dan.txt net\n" );
        return;
    }
 
    fscanf( f,"%i%i", &L1, &L2 );
 
    if ( ( L1 < 2 )|| ( L2 < 2 ) ) {
        printf("neverno L1 ili L2\n");
        return;
    }
 
    float **x;
    ShortComplex **X;
    /***тут вы неверно выделяли память***/
    x = new float* [ L1 ];
    X = new ShortComplex* [ L1 ];
 
    for ( int i = 0; i < L1; ++i ) {
        x[ i ] = new float[ L2 ];
        X[ i ] = new ShortComplex[ L2 ];
    }
 
    for (int i = 0; i < L1; ++i ) {
        for ( int j=0; j < L2; ++j ) {
            if ( ( i >= L1/2. ) && ( j >= L2/2. ) )
                x[ i ][ j ] = i;
            else
                x[ i ][ j ] = 0;
            printf("%6.3f ",x[i][j]);
        }
        printf("\n");
    }
    dpf2( x, X, L1, L2 );
    printf( "\nSpectr X\n" );
 
    for ( int i = 0; i < L1; ++i )  {
        for (int j = 0; j < L2; ++j )
            printf( "Re=%7.4f Im=%7.4f\n", X[ i ][ j ].re, X[ i ][ j ].im);
        printf("\n");
    }
    for ( int i = 0; i < L1; ++i ) {
        delete x[ i ];
        delete X[ i ];
    }
    delete[]x;
    delete []X;
}
int main()
{//главная программа -вызывает по выбору пользователя прямое или обратное преобразование
 //прямое для сигнала x[i]=i; //обратное для
    int ip;
    printf("2-mernoe DPF\n");
    do {
        printf( "\n 1-iz faila,  2-test,   0- Vixod\n" );
        scanf( "%d", &ip );
        if ( ip == 1 )
            fileDPF();
        else if ( ip == 2 )
            testDPF();
    } while ( ip != 0 );
 
  return 0;
}
результат
Code
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
2-mernoe DPF
 
 1-iz faila,  2-test,   0- Vixod
2
L1=?, L2=?
5
2
x=
 0.000  0.000 
 0.000  0.000 
 0.000  0.000 
 0.000  1.000 
 0.000  1.000 
 
Spectr X
( 2.0000  0.0000) (-2.0000  0.0000) 
(-0.5000 -1.5388) ( 0.5000  1.5388) 
(-0.5000  0.3633) ( 0.5000 -0.3633) 
(-0.5000 -0.3633) ( 0.5000  0.3633) 
(-0.5000  1.5388) ( 0.5000 -1.5388) 
 
 1-iz faila,  2-test,   0- Vixod
0
 
Process returned 0 (0x0)   execution time : 17.293 s
Press ENTER to continue.
тест памяти
==21943== Memcheck, a memory error detector
==21943== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==21943== Using Valgrind-3.6.1-Debian and LibVEX; rerun with -h for copyright info
==21943== Command: ./plus
==21943==
2-mernoe DPF

1-iz faila, 2-test, 0- Vixod
2
L1=?, L2=?
3
5
x=
0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 1.000 1.000

Spectr X
( 2.0000 0.0000) (-0.5000 -1.5388) (-0.5000 0.3633) (-0.5000 -0.3633) (-0.5000 1.5388)
(-1.0000 -1.7321) (-1.0827 1.2024) ( 0.5646 0.2514) (-0.0646 0.6146) ( 1.5827 -0.3364)
(-1.0000 1.7321) ( 1.5827 0.3364) (-0.0646 -0.6146) ( 0.5646 -0.2514) (-1.0827 -1.2024)
==21943== Mismatched free() / delete / delete []
==21943== at 0x4027919: operator delete(void*) (vg_replace_malloc.c:387)
==21943== by 0x8048A61: testDPF() (main.cpp:72)
==21943== by 0x8048DE7: main (main.cpp:143)
==21943== Address 0x42f90a8 is 0 bytes inside a block of size 20 alloc'd
==21943== at 0x4027F65: operator new[](unsigned int) (vg_replace_malloc.c:299)
==21943== by 0x8048873: testDPF() (main.cpp:46)
==21943== by 0x8048DE7: main (main.cpp:143)
==21943==
==21943== Mismatched free() / delete / delete []
==21943== at 0x4027919: operator delete(void*) (vg_replace_malloc.c:387)
==21943== by 0x8048A74: testDPF() (main.cpp:73)
==21943== by 0x8048DE7: main (main.cpp:143)
==21943== Address 0x42f90f0 is 0 bytes inside a block of size 80 alloc'd
==21943== at 0x4027F65: operator new[](unsigned int) (vg_replace_malloc.c:299)
==21943== by 0x804888E: testDPF() (main.cpp:47)
==21943== by 0x8048DE7: main (main.cpp:143)
==21943==

1-iz faila, 2-test, 0- Vixod
0
==21943==
==21943== HEAP SUMMARY:
==21943== in use at exit: 0 bytes in 0 blocks
==21943== total heap usage: 8 allocs, 8 frees, 324 bytes allocated
==21943==
==21943== All heap blocks were freed -- no leaks are possible
==21943==
==21943== For counts of detected and suppressed errors, rerun with: -v
==21943== ERROR SUMMARY: 6 errors from 2 contexts (suppressed: 17 from 6)

из теста видно что несмотря на работу программы где-то есть недочеты, бегло не заметил, вполне вероятно что стоит попробовать всю работу с память переписать в стиле Си. А по большому счету для этой программы использовать динамическую память не нужно. Подумайте сами, массив создается для выполнения расчета и тут же уничтожается, т.е. его не надо ни расширять и сужать... вполне себе можно сделать статический массив на стеке. В мейне или глобальный как бы по большому счету без разницы.
зы, я не переписывал код, я просто его выравнивал и по пути исправлял все что заметил. Потом скомилял и устранил все варнинги, ну а искать ошибки рантайма это уже ваша работа

Добавлено через 6 минут
Цитата Сообщение от eugrita Посмотреть сообщение
Хоть и стиль C, scanf у меня единственный в главной проге
а scanf и fscanf в функциях не в счет? вроде как stdin один на все задачи
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
23.12.2011, 05:30  [ТС]
удалил
C++
1
if (ip==0) continue;
не помогло.
В общем плюнул я на это дело. Убрал цикл do раз так
Теперь выполняется 1 раз с выбором по меню и завершается
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
23.12.2011, 05:34
Цитата Сообщение от eugrita Посмотреть сообщение
В общем плюнул я на это дело.
а вот это зря. Попробуйте все таки выделение\освобождение памяти переписать на Си, а в конце функций testDPF, fileDPF кинуть fflush().
0
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
23.12.2011, 05:38  [ТС]
интересный прием - тест памяти -никогда не был с ним знаком.
Как вы это делаете?

Добавлено через 3 минуты
Цитата Сообщение от alkagolik Посмотреть сообщение
а вот это зря. Попробуйте все таки выделение\освобождение памяти переписать на Си, а в конце функций testDPF, fileDPF кинуть fflush().
Ладно попробую. А сейчас спать - завтра к 9 -9.30 в УФМС за загранпаспортом бежать надо.
При такой жене как у меня особенно не распрограммируешься
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
23.12.2011, 05:41
Цитата Сообщение от alkagolik Посмотреть сообщение
Попробуйте все таки выделение\освобождение памяти переписать на Си
вот тест на память после того как я переписал работу с памятью в Си
Code
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
==22332== Memcheck, a memory error detector
==22332== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==22332== Using Valgrind-3.6.1-Debian and LibVEX; rerun with -h for copyright info
==22332== Command: ./plus
==22332== 
2-mernoe DPF
 
 1-iz faila,  2-test,   0- Vixod
2
L1=?, L2=?
5
12
x=
 0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000 
 0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000 
 0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000 
 0.000  0.000  0.000  0.000  0.000  0.000  1.000  1.000  1.000  1.000  1.000  1.000 
 0.000  0.000  0.000  0.000  0.000  0.000  1.000  1.000  1.000  1.000  1.000  1.000 
 
Spectr X
(12.0000  0.0000) (-2.0000 -7.4641) ( 0.0000 -0.0000) (-2.0000 -2.0000) (-0.0000  0.0000) (-2.0000 -0.5359) ( 0.0000  0.0000) (-2.0000  0.5359) ( 0.0000  0.0000) (-2.0000  2.0000) ( 0.0000 -0.0000) (-2.0000  7.4641) 
(-3.0000 -9.2331) (-5.2430  3.4049) (-0.0000 -0.0000) (-1.0388  2.0388) ( 0.0000  0.0000) ( 0.0877  1.6728) (-0.0000 -0.0000) ( 0.9123  1.4049) (-0.0000 -0.0000) ( 2.0388  1.0388) (-0.0000 -0.0000) ( 6.2430 -0.3272) 
(-3.0000  2.1796) ( 1.8557  1.5028) (-0.0000  0.0000) ( 0.8633  0.1367) (-0.0000 -0.0000) ( 0.5973 -0.2293) ( 0.0000  0.0000) ( 0.4027 -0.4972) (-0.0000 -0.0000) ( 0.1367 -0.8633) (-0.0000  0.0000) (-0.8557 -2.2293) 
(-3.0000 -2.1796) (-0.8557  2.2293) (-0.0000 -0.0000) ( 0.1367  0.8633) ( 0.0000  0.0000) ( 0.4027  0.4972) ( 0.0000  0.0000) ( 0.5973  0.2293) (-0.0000 -0.0000) ( 0.8633 -0.1367) ( 0.0000  0.0000) ( 1.8557 -1.5028) 
(-3.0000  9.2331) ( 6.2430  0.3272) (-0.0000  0.0000) ( 2.0388 -1.0388) ( 0.0000 -0.0000) ( 0.9123 -1.4049) ( 0.0000  0.0000) ( 0.0877 -1.6728) (-0.0000 -0.0000) (-1.0388 -2.0388) ( 0.0000  0.0000) (-5.2430 -3.4049) 
 
 1-iz faila,  2-test,   0- Vixod
0
==22332== 
==22332== HEAP SUMMARY:
==22332==     in use at exit: 0 bytes in 0 blocks
==22332==   total heap usage: 12 allocs, 12 frees, 1,240 bytes allocated
==22332== 
==22332== All heap blocks were freed -- no leaks are possible
==22332== 
==22332== For counts of detected and suppressed errors, rerun with: -v
==22332== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 17 from 6)
==22332== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 17 from 6)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2011, 05:41
Помогаю со студенческими работами здесь

Функция scanf не работает
Возникает проблема, что функция scanf не работает. Скрин: Можно как-нить решить? И не будут ли еще подобные проблемы встречаться? ...

Функция scanf() не работает
Здравствуйте, помогите решить проблему с функцией scanf(); Она не принимает значения в переменные вообще. Работаю в Visual Studio 2017....

Scanf не работает дважды
Вот и я решил завести аккаунт на этом форуме, т.к. часто выручает в случае каких-либо передряг и казусов в работе с С. Но не в этом суть :)...

Scanf работает, но значение не меняется
Добрый день! Не могу понять эту проблему, прям загадка какая-то. Мы задаем переменной значение 75. #include &lt;stdio.h&gt; int...

Не работает scanf в одной из строк
#include &lt;stdio.h&gt; int main() { int a, b, c, loop; char symbol; char change; while(1) { loop=0;


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru