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

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

Восстановить пароль Регистрация
 
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
28.03.2013, 23:29     Ошибка при выделении памяти #1
Когда убираю 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;
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
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
5282 / 4801 / 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
5282 / 4801 / 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;
        
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2013, 00:22     Ошибка при выделении памяти
Еще ссылки по теме:

C++ ошибка при выделении памяти
C++ Почему не вылетает ошибка при выделении памяти под динамический массив, размером 100 Гб?
Ошибка при выделении памяти под вектор методом resize C++

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

Или воспользуйтесь поиском по форуму:
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;
        
}
Понял свою ошибку. Спасибо Вам
Yandex
Объявления
29.03.2013, 00:22     Ошибка при выделении памяти
Ответ Создать тему
Опции темы

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