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

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

Восстановить пароль Регистрация
 
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
19.06.2014, 06:42     Инициализация указателя с malloc ? #1
Я тут прочитал про malloc, верно ли я понял?

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

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

C++
1
2
3
4
5
char* pszBuffer = static_cast< char* >( malloc( 16 * sizeof( char* ) ) );
 
//Работа над ним..
 
free( pszBuffer );
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
korvin_
 Аватар для korvin_
1325 / 1096 / 160
Регистрация: 28.04.2012
Сообщений: 3,923
19.06.2014, 06:51     Инициализация указателя с malloc ? #2
Цитата Сообщение от pEntity Посмотреть сообщение
Выходит лучше сделать так?
Выходит в C++ лучше использовать new и delete.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
19.06.2014, 08:33     Инициализация указателя с malloc ? #3
А еще лучше - смартпоинтеры и стандатрные контейнеры.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.06.2014, 09:10     Инициализация указателя с malloc ? #4
Цитата Сообщение от pEntity Посмотреть сообщение
Есть: char* pszBuffer[ 16 ];
Выходит лучше сделать так?
C++
1
2
3
char* pszBuffer = static_cast< char* >( malloc( 16 * sizeof( char* ) ) );
//Работа над ним..
free( pszBuffer );
что значит лучше? первое - это 16 указателей, второе - один указатель
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.06.2014, 12:04     Инициализация указателя с malloc ? #5
Jupiter, нет, второе тоже 16 указателей ( 16 * sizeof( char* ) )
просто скастованные к static_cast< char* >
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.06.2014, 12:09     Инициализация указателя с malloc ? #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
второе тоже 16 указателей ( 16 * sizeof( char* ) )
нет, это буфер способный вместить 16 указателей, это не указатели
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.06.2014, 12:16     Инициализация указателя с malloc ? #7
Jupiter, так и вопрос был про буфер! У автора же тоже неинициализированные ничем указатели изначально были char* pszBuffer[ 16 ]; Это что? Не " буфер способный вместить 16 указателей"?

Ясен пень, что они ни на что валидное не указывают!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2014, 12:22     Инициализация указателя с malloc ?
Еще ссылки по теме:

инициализация указателя C++
C++ Инициализация указателя в классе
C++ Malloc vs new

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

Или воспользуйтесь поиском по форуму:
oxyfat
 Аватар для oxyfat
65 / 62 / 11
Регистрация: 01.05.2014
Сообщений: 247
19.06.2014, 12:22     Инициализация указателя с malloc ? #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;
}
Yandex
Объявления
19.06.2014, 12:22     Инициализация указателя с malloc ?
Ответ Создать тему
Опции темы

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