информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Где водятся OGRыСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





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

спасибо. а почему именно так?
<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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach