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

происходит переполнение памяти ? - C++

Восстановить пароль Регистрация
 
Simka_95
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 3
25.12.2012, 12:48     происходит переполнение памяти ? #1
Пожалуйста помогите решить проблему:
при компиляции ошибок нет, но при запуске выдает ошибку, я так понимаю происходит переполнение памяти, но как этого избежать?, пробовал 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
106
107
108
109
#include "stdafx.h"
#include "iostream.h"
#include "windows.h"
#include "time.h"
#include "stdlib.h"
#include "string"
#include "math.h"
 
    int MaxElement(int mas[],int sum)
    {
          int MaxE = mas[0];
          for(int i = 1; i < sum; ++i)
            {
             if (mas[i] > MaxE)
             MaxE = mas[i];        
            }
           char buf[20];
       itoa(MaxE,buf,2);
       std::string str;
       str.insert(0,buf);
       int size=str.size(); 
       str.erase(0,str.size());
       int max=size*sum;
           return max;
    }
 
void start(int bit)
{
   int A;
   int B;
   Sleep(100);
    srand(time(NULL));
    int *bin_mas=new int[bit];
    for(int d=0;d<bit;d++)
    {
        int k,s=0,sum=0;
    k=rand()%10;
    if (k<5)
    {
        k=1;
        bin_mas[d]=k;
        s++;
        sum++;
    }
    else
    {
        k=0;
        s++;
        bin_mas[d]=k;
    }
    }
 
    int *p_mas=new int[sum];
    int g=0;
    for(int db=0;db<bit;db++)
    {
         if(bin_mas[db]==1)
      {
          p_mas[g]=db+1;
          g++;
      }
    }
 
    int *mas_2=new int[sum/2];
    int f=0;
    for(int j=0;j<sum;j++)
        {
      if (p_mas[j]<p_mas[j+1])
      {
      mas_2[f]=p_mas[j+1]-p_mas[j];
      f++;
      }
      if(p_mas[j]==p_mas[j+1])
      {
          mas_2[f]=0;
      f++;
      }
        }
 
           char buf[20];
       itoa(p_mas[0],buf,2);
       std::string mystr;
       mystr.insert(0,buf);
       int size=mystr.size();
       int nm=size;
 
A=MaxElement(p_mas,g);
B=MaxElement(mas_2,f)+nm;
 
    cout<<A<<" ";
    cout<<B<<"\n";
}
 
int main(int argc, char* argv[])
{
      for(int e=0;e<30;e++)
    {
 
cout<<"64 bit"<<"\n";
start(64);
cout<<"\n"<<"----------------------"<<"\n";
cout<<"128 bit"<<"\n";
start(128);
cout<<"\n"<<"----------------------"<<"\n";
cout<<"256 bit"<<"\n";
start(256);
    }
    return 0;
}
Миниатюры
происходит переполнение памяти ?  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vladimir616
110 / 110 / 3
Регистрация: 05.07.2009
Сообщений: 224
25.12.2012, 13:37     происходит переполнение памяти ? #2
Simka_95, на какой строчке возникает ошибка?
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 538
25.12.2012, 16:39     происходит переполнение памяти ? #3
нууу, начнем с того, что идентификатор Sum объявлен в цикле. А после вы его используете в другом цикле. Это невозможно: он будет не определен. Определите его сначала.

C++
1
2
3
4
void start(int bit)
{
    int A, B;
    int sum = 0;
а дальше то, из-за чего, собственно, ошибка.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    int *mas_2=new int[sum/2]; // вдвое меньше суммы
    int f=0;
 
    for(int j=0;j<sum;j++) // цикл до суммы.
    {
        if (p_mas[j] < p_mas[j+1])
        {
            mas_2[f] = p_mas[j+1]-p_mas[j]; // mas_2[f] если f больше, 
                                            // чем sum/2, то выход за границы массива.
            f++;
        }
        if(p_mas[j] == p_mas[j+1])
        {
            mas_2[f]=0;
            f++;
        }
    }
Simka_95
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 3
25.12.2012, 19:17  [ТС]     происходит переполнение памяти ? #4
Теперь все ясно, огромное спасибо
Yandex
Объявления
25.12.2012, 19:17     происходит переполнение памяти ?
Ответ Создать тему
Опции темы

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