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

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

Войти
Регистрация
Восстановить пароль
 
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
#1

Ошибка при выделении памяти - C++

28.03.2013, 23:29. Просмотров 411. Ответов 6
Метки нет (Все метки)

Когда убираю free(buf), то ошибки нету, а когда есть, то вылазит ошибка. Почему такое происходит?
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
#include <stdlib.h>
#include <stdio.h>
 
int main()
{
    int i=0, count;
    FILE *f=fopen("text.txt","rb");
    char *buf=(char*) malloc(30);
    if (buf==0) exit(1);
    if (f==NULL) exit(1);
 
    fseek(f,0,SEEK_END);
    count=ftell(f);
 
    fseek(f,0,SEEK_SET);
    fread(buf,1,count,f);
    
    for(i=0;i<count;i++)
    {
        printf("%c",*(buf+i));
    }
 
    free(buf);
    fclose(f);
    getchar();
    return 1;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2013, 23:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при выделении памяти (C++):

Ошибка при выделении памяти - C++
Здравствуйте, друзья. Подскажите, пожалуйста, почему выскакивает ошибка при повторном выделении память (ведь память в куче удаляется...

Ошибка при выделении памяти - C++
Вопрос: из-за чего программа может рушится? int *NRRow = new int ; int *NRow = new int ; int *NCol = new int ; //тут...

Ошибка при динамическом выделении памяти - C++
Я не понимаю почему, но почему-то пример по динамическому выделению памяти, взятый с этой веб-страницы: http://cppstudio.com/post/9555/...

Ошибка при динамическом выделении памяти - C++
почему у меня возникет ошибка вот тут struct TOVAR *New = new struct TOVAR; пишит недопустимый неполный тип на struct подчеркивает...

Ошибка при выделении памяти с помощью malloc - C++
Помогите выдает ошибку в рядочке :&quot;Ar = ( far *)malloc(size*sizeof(int));&quot; полный текст програмы: #include &quot;stdafx.h&quot; using namespace...

Ошибка при выделении памяти динамически для структуры - C++
Есть программа. Вылетает ошибка. Если gets(BLOCKNOTE.NAME) заменить на cin&gt;&gt;BLOCKNOTE.NAME все работает нормально. Хотелось бы ипользовать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
28.03.2013, 23:56 #2
Замените, может поможет
C++
1
2
3
char *buf=(char*) malloc(30);
....
free(buf);
на
C++
1
2
3
4
char * buf=new char[30];
 
delete []buf;
buf=NULL;
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
29.03.2013, 00:05  [ТС] #3
Цитата Сообщение от egor2116 Посмотреть сообщение
Замените, может поможет
C++
1
2
3
char *buf=(char*) malloc(30);
....
free(buf);
на
C++
1
2
3
4
char * buf=new char[30];
 
delete []buf;
buf=NULL;
Эти операции идентичны, дело не в этом.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2013, 00:11 #4
Цитата Сообщение от aleksandr_t94 Посмотреть сообщение
то вылазит ошибка.
Какая?
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
29.03.2013, 00:14  [ТС] #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Какая?
Заскриншотил ошибку http://floomby.ru/s1/Vax6AV/full/
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.03.2013, 00:16 #6
Нужно сначала узнать сколько памяти выделять, а потом уже выделять:
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
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int i=0, count;
    FILE *f=fopen("text1.txt","rb");
    if (f==NULL) exit(1);
 
    fseek(f,0,SEEK_END);
    count=ftell(f);
 
    char *buf=(char*) malloc(count);
    if (buf==0) exit(1);
 
    fseek(f,0,SEEK_SET);
    fread(buf,1,count,f);
    
    for(i=0;i<count;i++)
    {
        printf("%c", *(buf+i));
    }
 
    free(buf);
    fclose(f);
    
    getchar();
    
    return 0;
        
}
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
29.03.2013, 00:22  [ТС] #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Нужно сначала узнать сколько памяти выделять, а потом уже выделять:
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
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int i=0, count;
    FILE *f=fopen("text1.txt","rb");
    if (f==NULL) exit(1);
 
    fseek(f,0,SEEK_END);
    count=ftell(f);
 
    char *buf=(char*) malloc(count);
    if (buf==0) exit(1);
 
    fseek(f,0,SEEK_SET);
    fread(buf,1,count,f);
    
    for(i=0;i<count;i++)
    {
        printf("%c", *(buf+i));
    }
 
    free(buf);
    fclose(f);
    
    getchar();
    
    return 0;
        
}
Понял свою ошибку. Спасибо Вам
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2013, 00:22
Привет! Вот еще темы с ответами:

Ошибка при выделении памяти под двумерный массив - C++
#include &lt;iostream&gt; using namespace std; class array { int size1, size2; char **matr; public: array(int n1, int n2); ...

Ошибка при выделении памяти под вектор методом resize - C++
Всем добрый день! Возник следующий вопрос: выделяю память для вектора с помощью метода resize(w*h). Затем мне нужно на место с определенным...

Почему не вылетает ошибка при выделении памяти под динамический массив, размером 100 Гб? - C++
Здравствуйте, знатоки! Столкнулся с проблемой выделения памяти под динамические массивы. При создании массива более программа вылетает...

Ошибка в выделении памяти - C++
проблема с выделением памяти. ошибку никак найти не могу, поможет кто исправить? #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.03.2013, 00:22
Ответ Создать тему
Опции темы

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