информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыСетевые кракеры и правда о деле ЛевинаАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C] Выделение памяти из функции 15.09.03 10:15  Число просмотров: 1127
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
Отредактировано 15.09.03 10:17  Количество правок: 1
<"чистая" ссылка>
> > А надо так:
> >
> > void func(char *&d, char *s) {
>
> спасибо. а почему именно так?

Можно еще void func( char **d, char *s);
Вызов, соответственно, func( &srtu...

Почему: передали функции указатель (не имеет смысла, если она его сразу "запарывает") в переменной d, ну изменила она этот параметр,присвоив то, что маллок вернул, указатель на строку в main не измениться. Указатель на строку в структуре в функции main она не изменит, потому, что не передался его адрес, передалось в функцию только его значение. Как изменить из вызываемой функции указатель - надо передать указатель на этот указатель.
<programming>
[C] Выделение памяти из функции 14.09.03 07:43  
Автор: makeworld Статус: Member
<"чистая" ссылка>
тестовая прога:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define TEST "test string"

struct struct1 {
	char *str;
};

struct struct2 {
	struct struct1 *stru;
};

void func(char *d, char *s) {
	d = (char *)malloc(strlen(s)+1);
	strncpy(d,s,strlen(s)+1);
}


void main() {
struct struct2 *s;

s = (struct2 *)malloc(sizeof(struct2));
s->stru = (struct1 *)malloc(sizeof(struct1));

if (!s|!s->stru) printf("malloc() error\n");

memset(s->stru,0,sizeof(struct1));

//s->stru->str = (char *)malloc(sizeof(TEST)); // работает!
//strncpy(s->stru->str,TEST,sizeof(TEST));
func(s->stru->str,TEST); // не работает! (s->stru->str после работы ф-ции равен NULL)

printf("str=%s\n",s->stru->str);

}

---

Почему в функции память не выделилась?
Использую VC++.NET (2002).
[C] Выделение памяти из функции 14.09.03 15:46  
Автор: Tlo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> void func(char *d, char *s) {

А надо так:

void func(char *&d, char *s) {
[C] Выделение памяти из функции 15.09.03 07:37  
Автор: makeworld Статус: Member
<"чистая" ссылка>
> А надо так:
>
> void func(char *&d, char *s) {

спасибо. а почему именно так?
[C] Выделение памяти из функции 15.09.03 10:15  
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
Отредактировано 15.09.03 10:17  Количество правок: 1
<"чистая" ссылка>
> > А надо так:
> >
> > void func(char *&d, char *s) {
>
> спасибо. а почему именно так?

Можно еще void func( char **d, char *s);
Вызов, соответственно, func( &srtu...

Почему: передали функции указатель (не имеет смысла, если она его сразу "запарывает") в переменной d, ну изменила она этот параметр,присвоив то, что маллок вернул, указатель на строку в main не измениться. Указатель на строку в структуре в функции main она не изменит, потому, что не передался его адрес, передалось в функцию только его значение. Как изменить из вызываемой функции указатель - надо передать указатель на этот указатель.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach