Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
pEntity
66 / 86 / 20
Регистрация: 12.12.2012
Сообщений: 1,025
#1

Инициализация указателя с malloc ?

19.06.2014, 06:42. Просмотров 450. Ответов 7
Метки нет (Все метки)

Я тут прочитал про malloc, верно ли я понял?

Есть: char* pszBuffer[ 16 ];

Выходит лучше сделать так?

C++
1
2
3
4
5
char* pszBuffer = static_cast< char* >( malloc( 16 * sizeof( char* ) ) );
 
//Работа над ним..
 
free( pszBuffer );
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2014, 06:42
Ответы с готовыми решениями:

инициализация указателя
class Item { public: Item() { num0=new char(&quot;как&quot;);//ошибка cannot...

Инициализация указателя
Написал такой код: #include &lt;iostream&gt; using namespace std; int main()...

Инициализация указателя в классе
Есть класс const int NoL = 0; class A{ private: int&amp; IF; A(){IF =...

Инициализация указателя в функции
не понимаю... main.cpp somestruct *v = 0; int main() { init(v);

Инициализация указателя через функцию
#include &lt;iostream&gt; using namespace std; void inic(int * k); int main() {...

7
korvin_
2131 / 1622 / 315
Регистрация: 28.04.2012
Сообщений: 5,828
19.06.2014, 06:51 #2
Цитата Сообщение от pEntity Посмотреть сообщение
Выходит лучше сделать так?
Выходит в C++ лучше использовать new и delete.
1
0x10
2571 / 1751 / 288
Регистрация: 24.11.2012
Сообщений: 4,377
19.06.2014, 08:33 #3
А еще лучше - смартпоинтеры и стандатрные контейнеры.
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.06.2014, 09:10 #4
Цитата Сообщение от pEntity Посмотреть сообщение
Есть: char* pszBuffer[ 16 ];
Выходит лучше сделать так?
C++
1
2
3
char* pszBuffer = static_cast< char* >( malloc( 16 * sizeof( char* ) ) );
//Работа над ним..
free( pszBuffer );
что значит лучше? первое - это 16 указателей, второе - один указатель
0
Kuzia domovenok
2262 / 2031 / 459
Регистрация: 25.03.2012
Сообщений: 7,183
Записей в блоге: 1
19.06.2014, 12:04 #5
Jupiter, нет, второе тоже 16 указателей ( 16 * sizeof( char* ) )
просто скастованные к static_cast< char* >
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.06.2014, 12:09 #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
второе тоже 16 указателей ( 16 * sizeof( char* ) )
нет, это буфер способный вместить 16 указателей, это не указатели
0
Kuzia domovenok
2262 / 2031 / 459
Регистрация: 25.03.2012
Сообщений: 7,183
Записей в блоге: 1
19.06.2014, 12:16 #7
Jupiter, так и вопрос был про буфер! У автора же тоже неинициализированные ничем указатели изначально были char* pszBuffer[ 16 ]; Это что? Не " буфер способный вместить 16 указателей"?

Ясен пень, что они ни на что валидное не указывают!
0
oxyfat
66 / 63 / 21
Регистрация: 01.05.2014
Сообщений: 247
19.06.2014, 12:22 #8
Приветствую!

Пример 01 (Borland C++)
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
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <process.h>
 
int main(void)
{
    char *str;
 
    /* allocate memory for string */
    if ((str = (char *) malloc(10)) == NULL)
    {
       printf("Not enough memory to allocate buffer\n");
       exit(1);  /* terminate program if out of memory */
    }
 
    /* copy "Hello" into string */
    strcpy(str, "Hello");
 
    /* display string */
    printf("String is %s\n", str);
 
    /* free memory */
    free(str);
 
    return 0;
}
Пример 02 ( от DilDog(а) - профессиональный программист ( круче Едика Сноу )

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
int CmdProc_FileView(CAuthSocket *cas_from, int comid, DWORD nArg1, char *svArg2, char *svArg3)
{
    HANDLE hFile;
    hFile=CreateFile(svArg2,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
    if(hFile==INVALID_HANDLE_VALUE) {
        IssueAuthCommandReply(cas_from,comid,0,"Could not open file.\n");
        return 1;
    }
 
    // Spit out lines to io socket
    char *pData;
    char *svLine;
    DWORD dwLen,dwBytes;
    pData=(char *) malloc(4097);
    svLine=(char *) malloc(4097);
 
    if(pData==NULL || svLine==NULL) {
        if(pData!=NULL) free(pData);
        if(svLine!=NULL) free(svLine);
        IssueAuthCommandReply(cas_from,comid,0,"Error allocating memory.\n");
        return 1;
    }
    
    dwLen=4096;
    do {
        ReadFile(hFile,pData,dwLen,&dwBytes,NULL);
        pData[dwBytes]='\0';
        IssueAuthCommandReply(cas_from,comid,1,pData);
    } while(dwLen==dwBytes);
    IssueAuthCommandReply(cas_from,comid,0,"\n<<EOF>>\n");
 
    free(pData);
    free(svLine);
 
    CloseHandle(hFile);
    
    return 0;
}
0
19.06.2014, 12:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2014, 12:22

Объясните как происходит инициализация данного указателя
Доброе утро. Объясните понятным языком по этапно, как происходит инициализация...

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании...

Создание указателя на экземпляр класса, описанного после объявления указателя
Здравствуйте! Проблема в том, что нужно сделать так: class A{ public: B*...


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

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

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