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

Выделение памяти - C++

Восстановить пароль Регистрация
 
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
26.06.2012, 16:41     Выделение памяти #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
#include "stdafx.h"
#include "stdio.h"
#include <iostream> 
#include "string.h"
using namespace std; 
int main(int argc, char* argv[])
{setlocale(LC_ALL,"Russian");
FILE *Text; 
    Text = fopen ( "Text.txt" , "r" ); 
    if (Text==NULL)
    {  
       printf("He удается открыть файл.\n");
       system("Pause"); 
       return 1;}
        int n; 
        char * buffer;
        fseek (Text , 0 , SEEK_END);
        n=ftell (Text);
    buffer=(char*) malloc (sizeof(char)*n);
    char str[10]; 
    cout << "Введите последовательность символов:\n"; 
    cin >> str;            
    while (fscanf(Text,"%s",buffer) != EOF)
    {
        if (strstr(buffer,str) != NULL)
        {
            cout << "Совпадение обнаружено " << str << endl; 
            system("Pause");
            break;
        }
        else {cout << "Совпадений нет"<< endl;  
             system("Pause");}
                for (int i=0; i < 512; i++) buffer[i]=0;
    } 
    fclose(Text); 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2012, 16:41     Выделение памяти
Посмотрите здесь:

Выделение памяти C++
C++ Выделение памяти...
Выделение памяти C++
C++ Распределение памяти. Динамическое выделение памяти
Выделение памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
26.06.2012, 16:56     Выделение памяти #2
Строка 33 и нет free.
И вообще, на С++ лучше использовать new/delete.
-=ЮрА=-
Заблокирован
Автор FAQ
26.06.2012, 17:28     Выделение памяти #3
Цитата Сообщение от Dady Посмотреть сообщение
C++
1
2
3
4
5
6
7
fseek (Text , 0 , SEEK_END);
* * * * n=ftell (Text);
* * buffer=(char*) malloc (sizeof(char)*n);
* * char str[10]; 
* * cout << "Введите последовательность символов:\n"; 
* * cin >> str; * * * * * *
* * while (fscanf(Text,"%s",buffer) != EOF)
-

Dady, ошибка в том что ты отодвинул указатель вконец файла здесь fseek (Text , 0 , SEEK_END); и не вернул его вначало, таким образом пытаешся читать файл курсор которого и так уже вконце, просто отмотай его вначало fseek (Text , 0 , SEEK_SET); перед циклом

Добавлено через 3 минуты

Не по теме:

Dady, вообще же код жуткая смесь Си и плюсов, можно было либо писать полностью на Си и отказаться от cout с cin либо же считать файл с помощью ifsteam, загнать его содержимое в stringstream и оттуда уже черпать слова.

Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
26.06.2012, 17:28  [ТС]     Выделение памяти #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Dady, ошибка в том что ты отодвинул указатель вконец файла здесь fseek (Text , 0 , SEEK_END); и не вернул его вначало, таким образом пытаешся читать файл курсор которого и так уже вконце, просто отмотай его вначало fseek (Text , 0 , SEEK_SET); перед циклом
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
#include "stdafx.h"
#include "stdio.h"
#include <iostream> 
#include "string.h"
using namespace std; 
int main(int argc, char* argv[])
{setlocale(LC_ALL,"Russian");
FILE *Text; 
    Text = fopen ( "Text.txt" , "r" ); 
    if (Text==NULL)
    {  
       printf("He удается открыть файл.\n");
       system("Pause"); 
       return 1;}
        int n; 
        char * buffer;
        fseek (Text , 0 , SEEK_END);
        n=ftell (Text);
    buffer=(char*) malloc (sizeof(char)*n);
    char str[10]; 
    cout << "Введите последовательность символов:\n"; 
    cin >> str;
     [B][I](Text , 0 , SEEK_SET);  [/I][/B]         
    while (fscanf(Text,"%s",buffer) != EOF)
    {
        if (strstr(buffer,str) != NULL)
        {
            cout << "Совпадение обнаружено " << str << endl; 
            system("Pause");
            break;
        }
        else {cout << "Совпадений нет"<< endl;  
             system("Pause");}
                for (int i=0; i < 512; i++) buffer[i]=0;
    } 
    fclose(Text); 
    return 0;
}
Вот здесь?
-=ЮрА=-
Заблокирован
Автор FAQ
26.06.2012, 17:41     Выделение памяти #5
Чтобы не быть голословным
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main()
{
    int count    = 0;//Áóäåò ñîäåðæГ*ГІГј ÷èñëî ñîâïГ*äåГ*ГЁГ©
    long n       = 0;//áóäåò ñîäåðæГ*ГІГј äèëГ*Гі ГґГ*éëГ*
    char str[32] = {0};//Г*Г*ГёГ* ïîñëåäîâГ*òåëüГ*îñòü
    char *buffer = NULL;//ГЎГіГґГҐГ° ГІГҐГЄГ±ГІГ*
    FILE *Text   = NULL; 
    Text = fopen ("Text.txt", "rb"); 
    if(Text == NULL)
        printf("Error open Text.txt");
    else
    {
        fseek(Text,0,SEEK_END);
        n = ftell(Text);
        fseek(Text,0,SEEK_SET);
        buffer = (char *)malloc((1 + n)*sizeof(char));
        if(buffer == NULL)
            printf("Allocation memory error\n");
        else
        {
            printf("str = ");scanf("%31s",str);
            //Гџ ГЎГ» îòòГ*ëêèâГ*ëñÿ îò Г±ГІГ*Г*Г¤Г*ðòГ*îé ГґГіГ*êöèè feof
            while(!feof(Text))//Г* Г*ГҐ âîçâðГ*ГІГ* fscanf
            {
                if(fscanf(Text,"%s",buffer))
                if(strcmp(buffer,str) == 0)
                {
                    //Ïî÷åìó ГЎГ» êðîìå èçâåùåГ*ГЁГї Г*ГҐ ïðîïå÷Г*ГІГ*ГІГј
                    //ïîçèöèþ Гў ГґГ*éëå ãäå âñòðåòèëè str
                    printf
                    (
                        "Found comparision :\n"
                        "FILE POS : %d\n", ftell(Text)
                    );
                    count = count + 1;
                }
            }
            if(count == 0)
                printf("Text.txt not contain str = %s\n",str);
            else
                printf("Text.txt contains %d str = %s\n",count,str);
            //Åñëè ГЇГ*ìÿòü áûëГ* âûäåëåГ*Г* Г·ГЁГ±ГІГЁГ¬ ГҐВё
            free((void *)buffer);
        }
        fclose(Text);//Г‡Г*êðûëè ïîòîê Г·ГІГҐГ*ГЁГї
    }
    //îäГ*Г* ñòîï òî÷êГ* ГўГЄГ®Г*öå Гў êîòîóþ ïîïГ*ä¸ì ГўГ±ГҐГЈГ¤Г*,
    //Г* Г*ГҐ ГЄГіГ·ГЁ ГЇГ® ГўГҐГІГЄГ*Г¬ êîäГ*
    system("pause");
    return 0;
}
Text.txt содержал строку This is the test
Миниатюры
Выделение памяти  
-=ЮрА=-
Заблокирован
Автор FAQ
26.06.2012, 17:43     Выделение памяти #6
Цитата Сообщение от Dady Посмотреть сообщение
Вот здесь?
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C
1
2
3
4
5
6
7
if(Text == NULL)
* * * * printf("Error open Text.txt");
* * else
* * {
* * * * fseek(Text,0,SEEK_END);
* * * * n = ftell(Text);
* * * * fseek(Text,0,SEEK_SET);
- здесь
Yandex
Объявления
26.06.2012, 17:43     Выделение памяти
Ответ Создать тему
Опции темы

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