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

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

Войти
Регистрация
Восстановить пароль
 
slipp1
13 / 12 / 1
Регистрация: 09.11.2012
Сообщений: 366
Записей в блоге: 1
#1

realloc - C++

24.08.2013, 14:51. Просмотров 396. Ответов 9
Метки нет (Все метки)

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
#include <iostream>
using namespace std;
 
int main()
{
    int size=0;
    cout<<"enter size array: ";
    cin>>size;
 
    int *arr;
    int *arr2;
 
    arr=(int*)malloc(size+1);
 
    for(int i=0;i!=size;i++)
    {
        arr[i]=i;
        cout<<arr[i]<<endl;
    }
    
    //выделяю для arr2 половину arr, данные должны перенестись в arr2
    arr2=(int*)realloc(arr,size/2);
 
    //arr2 оказывается пустым
    int i=0;
    while(arr2[i]!='\0')
    {
        cout<<"enter"<<endl;
        cout<<arr2[i]<<" ";
        i++;
    }
 
    return 0;
}
выделяю память через malloc

выделяю другой блок памяти через realloc в два раза меньше чем первый

данные должны перенестись? но arr2 почему то пустой? не пойму роботу realloc??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2013, 14:51     realloc
Посмотрите здесь:

C++ malloc/realloc
C++ realloc
malloc, realloc C++
C++ Не выполняется realloc
аналог realloc() в С++ C++
C++ realloc
ошибка realloc C++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dmitriy_M
1337 / 1218 / 111
Регистрация: 20.03.2009
Сообщений: 4,350
Записей в блоге: 11
24.08.2013, 14:57     realloc #2
Цитата Сообщение от slipp1 Посмотреть сообщение
данные должны перенестись?
они перенесли
Цитата Сообщение от slipp1 Посмотреть сообщение
но arr2 почему то пустой?
он не пуст
Цитата Сообщение от slipp1 Посмотреть сообщение
не пойму роботу realloc??
у тебя ошибка. использую for вместо while
slipp1
13 / 12 / 1
Регистрация: 09.11.2012
Сообщений: 366
Записей в блоге: 1
24.08.2013, 15:12  [ТС]     realloc #3
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
#include <iostream>
using namespace std;
 
#include <cstdlib>
 
int main()
{
    int size=0;
    cout<<"enter size array: ";
    cin>>size;
 
    int *arr;
    int *arr2;
 
 
    arr=(int*)malloc(size+1);
 
    for(int i=0;i!=size;i++)
    {
        arr[i]=i;
    }
 
 
    for(int i=0;i!=size;i++)
    {
        cout<<arr[i]<<endl;
    }
    
    int newSize=size/2;
 
    arr2=(int*)realloc(arr,newSize+1);
 
    cout<<"new"<<endl;
    for(int i=0;i!=newSize;i++)
    {
        cout<<arr2[i]<<endl;
    }
 
    free(arr);
    free(arr2);
 
    return 0;
}
чего я не знаю?
что я не так делаю??
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 15:20     realloc #4
int занимает не 1 байт. malloc принимает параметром количество байт, а не элементов. Поэтому нужно передать ему (количество_элементов*sizeof(элемента))
slipp1
13 / 12 / 1
Регистрация: 09.11.2012
Сообщений: 366
Записей в блоге: 1
24.08.2013, 15:24  [ТС]     realloc #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
#include <iostream>
using namespace std;
#include <cstdlib>
 
int main()
{
    int size=0;
    cout<<"enter size array: ";
    cin>>size;
 
    int *arr;
    int *arr2;
    
    arr=(int*)malloc(sizeof(int)*size+1);
 
    for(int i=0;i!=size;i++)
    {
        arr[i]=i;
    }
    
    for(int i=0;i!=size;i++)
    {
        cout<<arr[i]<<endl;
    }
    
    int newSize=size/2;
 
    arr2=(int*)realloc(arr,sizeof(int)*newSize);
 
    cout<<"new"<<endl;
    for(int i=0;i!=newSize;i++)
    {
        cout<<arr2[i]<<endl;
    }
 
    free(arr2);
    free(arr);
    
    return 0;
}
что не так с free?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 15:36     realloc #6
Цитата Сообщение от slipp1 Посмотреть сообщение
что не так с free?
Ты реалокнул первый пойнтер. Его очищать теперь не надо.
slipp1
13 / 12 / 1
Регистрация: 09.11.2012
Сообщений: 366
Записей в блоге: 1
24.08.2013, 15:37  [ТС]     realloc #7
Цитата Сообщение от Nekto Посмотреть сообщение
Ты реалокнул первый пойнтер. Его очищать теперь не надо.
почему??
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.08.2013, 15:46     realloc #8
Цитата Сообщение от slipp1 Посмотреть сообщение
почему??
Потому что это не memcpy.
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.08.2013, 15:56     realloc #9
Цитата Сообщение от slipp1 Посмотреть сообщение
почему??
потому что http://www.cplusplus.com/reference/cstdlib/realloc/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2013, 17:50     realloc
Еще ссылки по теме:

C++ Функция realloc
C++ Функция realloc
Malloc realloc и C++ C++
Альтернатива realloc ? C++
C++ Подводные камни realloc

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
24.08.2013, 17:50     realloc
  #10

Не по теме:

C++ и malloc/realloc фэйспалм

Yandex
Объявления
24.08.2013, 17:50     realloc
Ответ Создать тему
Опции темы

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