С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
pEntity
13 / 8 / 1
Регистрация: 12.12.2012
Сообщений: 442
#1

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

19.06.2014, 06:42. Просмотров 381. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Инициализация указателя с malloc ? (C++):

инициализация указателя - C++
class Item { public: Item() { num0=new char(&quot;как&quot;);//ошибка cannot convert from 'const char ' to 'char' num1=new...

Инициализация указателя - C++
Написал такой код: #include &lt;iostream&gt; using namespace std; int main() { int n=10; int* a=new int ;

Инициализация указателя в классе - C++
Есть класс const int NoL = 0; class A{ private: int&amp; IF; A(){IF = NoL; }; } на что компилятор ругается &quot;IF&quot;:...

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

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

Объясните как происходит инициализация данного указателя - C++
Доброе утро. Объясните понятным языком по этапно, как происходит инициализация указателя на указатель в той строчке (тему про указатели...

7
korvin_
1940 / 1425 / 226
Регистрация: 28.04.2012
Сообщений: 5,095
19.06.2014, 06:51 #2
Цитата Сообщение от pEntity Посмотреть сообщение
Выходит лучше сделать так?
Выходит в C++ лучше использовать new и delete.
1
0x10
2486 / 1661 / 249
Регистрация: 24.11.2012
Сообщений: 4,136
19.06.2014, 08:33 #3
А еще лучше - смартпоинтеры и стандатрные контейнеры.
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 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
2061 / 1906 / 176
Регистрация: 25.03.2012
Сообщений: 6,567
Записей в блоге: 1
19.06.2014, 12:04 #5
Jupiter, нет, второе тоже 16 указателей ( 16 * sizeof( char* ) )
просто скастованные к static_cast< char* >
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.06.2014, 12:09 #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
второе тоже 16 указателей ( 16 * sizeof( char* ) )
нет, это буфер способный вместить 16 указателей, это не указатели
0
Kuzia domovenok
2061 / 1906 / 176
Регистрация: 25.03.2012
Сообщений: 6,567
Записей в блоге: 1
19.06.2014, 12:16 #7
Jupiter, так и вопрос был про буфер! У автора же тоже неинициализированные ничем указатели изначально были char* pszBuffer[ 16 ]; Это что? Не " буфер способный вместить 16 указателей"?

Ясен пень, что они ни на что валидное не указывают!
0
oxyfat
66 / 63 / 11
Регистрация: 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(тип) не тождественно инкременту этого же указателя? - C++
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в...

Преобразование кода без указателя в код с использованием указателя - C++
Правильно ли выполнил? Исходный код без указателя #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt; using namespace...

Как сделать функцию от указателя на класс и указателя на метод? - C++
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод. Обращаться к классу нужно именно по указателю,...

В чём отличие константного указателя и указателя на константу? - C++
int *const p1 и int const* p2 Объясните мне в чём тут отличие.


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

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

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