Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
#1

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

26.06.2012, 16:41. Просмотров 405. Ответов 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
#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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2012, 16:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение памяти (C++):

Распределение памяти. Динамическое выделение памяти - C++
an-1 an-2 ... a2

Выделение памяти, проверка на утечку памяти - C++
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление и запись ячейки памяти? Может быть, есть более простые...

Выделение памяти - C++
Во время выполнения программы после ввода нескольких символов выводит ошибку: double free or corruption(out): 0x0000000001157010 ***...

Выделение памяти - C++
Платформа и компилятор x64. Установлено 64Gb ОЗУ, 60Gb из них откусил SQL Server. Пытаюсь сделать следующее: struct Dictionary { ...

Выделение памяти - C++
Скажите пожалуйста что не так? Не могу получить доступ к элементу str = 12, stlb = 3 bool** tempValues = new(bool*); for(int i = 0;...

Выделение памяти - C++
Здравствуйте! #include&lt;iostream&gt; int main() { int *mass = new int ; int *mass2 = new int ; std::cout &lt;&lt; (unsigned int)mass &lt;&lt;...

5
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
26.06.2012, 16:56 #2
Строка 33 и нет free.
И вообще, на С++ лучше использовать new/delete.
0
-=ЮрА=-
Заблокирован
Автор 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 и оттуда уже черпать слова.

1
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;
}
Вот здесь?
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
1
Миниатюры
Выделение памяти  
-=ЮрА=-
Заблокирован
Автор 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);
- здесь
1
26.06.2012, 17:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2012, 17:43
Привет! Вот еще темы с ответами:

Выделение памяти - C++
Эта программа должна забрать у системы 10 МБ, но диспетчер задач показывает, что программа забирает 163 МБ. Почему ? ...

Выделение памяти - C++
Доброго всем вечера. В книжке нашел задание: определить класс, представляющий стек. Сделал так, что при заполнении всего стека,...

Выделение памяти - C++
Вот кусок кода, класс и функция добавления в список Класс занимает 64 бита, я добавляю 10 элементов в список - 640 бит Потом отнимаю...

Выделение памяти - C++
Всем доброго времени суток! Пытаюсь сделать связанный список на 100кк элементов, но не выделив памяти и под половину, программа жрёт 4...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.