|
не возвращает по указателю |
|
|
|
Mar 29 2011, 15:59
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Нет, он будет содержать совсем не то значение, которое было присвоено строкой: Код char *duf = malloc(1000); Своими действиями вы меняете сам указатель, а не то, на что он указывает.
|
|
|
|
|
Mar 29 2011, 16:08
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(sergey sva @ Mar 29 2011, 17:44)  Почему может быть так, где что посмотреть? в одной функции выделяется память после вызывается другая функция она должна по указателю записать массив символов но возвращает абракадабру . Код void fun2(){
char *duf = malloc(1000); // Создали переменную duf, и содержащую адресс в памяти, где есть место на 1000 байт.
duf ="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; // выделили в стеке память для "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";, и потеряли указатель на те 1000 байт. Тоесть уже утечка памяти случилась, вы те 1000 байт уже не сможете освободить. fun1(duf); //эта функция не возвращает "1111111111122222233333333";
write ("запись старт"); //это работает
write (duf);
write ("запись енд"); //это работает
free(duf); }
void fun1(char * buf){
buf = "1111111111122222233333333"; // тут вы в стеке выделили память для "1111111111122222233333333", записали его адресс в buf, память для "1111111111122222233333333" освободили, и вышли. Теперь duf указывает в никуда. }
|
|
|
|
|
Mar 29 2011, 16:34
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(aaarrr @ Mar 29 2011, 18:12)  С duf как раз ничего не случится. Каюсь. Тормознул. А что автору-то надо? Цитата(sergey sva @ Mar 29 2011, 18:29)  Понял свою ошибку, сделал через memcpy все работает. Еще так можно Код void fun1(char ** buf){ static unsigned char l_buf[] = "1111111111122222233333333"; *buf = l_buf; }
int main(void) { char *duf; fun1(&duf); printf("after %p\n",duf); puts(duf);
}
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|