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

Работа с памятью - C++

Восстановить пароль Регистрация
 
Генри
12 / 12 / 2
Регистрация: 19.08.2012
Сообщений: 51
18.02.2013, 10:56     Работа с памятью #1
Задали программу написать которая удаляет слова с одинаковым количеством гласных и согласных букв. Слова вводятся через пробел, около 4 штук, а потом выводятся оставшиеся. Проблема в том, что иногда происходит сбой в работе с памятью. Иногда программа работает нормально. Можете подсказать, где ошибка?
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <Windows.h>
using namespace std;
 
int Probel(char*s, int n, int i)
{
    while(i<n && s[i]==' ') 
        i++;
    return i;
}
 
int DEL( char **ms, int m, int k)
{
    char *p=ms[k];
    for (int i=k; i<m; i++)
        ms[i]=ms[i+1];
    delete []p;
    return (m-1);
}
 
 
 
 void main ()
 {
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
     cout<<"Дан массив из n строк. Удалим все строки, имеющие одинаковое количество\nгласных и согласных букв.\n";
     char *s, **ms; int i, k=0,j,n=25,g=0,h=0,TAB[256];
     s=new char[80];
     ms=new char* [20];
     puts("Введите строку:"); 
     gets(s); cout<<endl;
     while (s[i]!='\0')
     {
         i=Probel(s,n,i); 
         ms[k]=new char [30];
         for (j=0; s[i]!='\0' && s[i]!=' '; j++, i++)
            ms[k][j]=s[i];
         ms[k][j]='\0';
         k++;
     }
     cout<<"\nСтроки для исследования:\n";
    for (i=0;i<k;i++)
        puts(ms[i]);
    cout<<endl;
    for(h=0,g=0,j=0;j<k;) 
   {
       for(i=0;i<256;i++) 
           TAB[i]=0;
       for(i=0; ms[j][i]!='\0';i++) 
       {
           TAB[ms[j][i]]++; h++;
       }
    if(TAB['a'])  g+=TAB['a'];
    if(TAB['e'])  g+=TAB['e'];
    if(TAB['y'])  g+=TAB['y'];
    if(TAB['o'])  g+=TAB['o']; 
    if(TAB['i'])  g+=TAB['i'];
    if(TAB['u'])  g+=TAB['u'];
    if(g==h-g) 
        k=DEL(ms,k,j);
    else j++;h=0,g=0;
   }
    cout<<"Строки, с разным количеством гласных и согласный:\n";
    for(i=0;i<k;i++) puts(ms[i]);
    for(i=0;i<k;i++) delete[]ms[i];
    delete[]ms;
    delete s;
    _getch();
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2013, 10:56     Работа с памятью
Посмотрите здесь:

Работа с памятью C++
работа с памятью C++
C++ Работа с памятью
C++ работа с памятью
C++ Работа с памятью
C++ Работа с памятью в С++
C++ Работа с памятью
Работа с памятью C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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