если вы видите этот текст, отключите в настройках форума использование JavaScript
Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания .
Новичкам также крайне полезно ознакомиться с данным документом .
[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 она не изменит, потому, что не передался его адрес, передалось в функцию только его значение. Как изменить из вызываемой функции указатель - надо передать указатель на этот указатель.