| 
    
    | 
   
           
    
     
Re: lug-bg: [OT] sym++ [Was: gcc str[i]=''; ?!.]
 
- Subject: Re: lug-bg: [OT] sym++ [Was: gcc str[i]=''; ?!.]
 
- From: Andrey Andreev <andreev@xxxxxxxxxxxxxx>
 
- Date: Tue, 15 Jun 2004 18:48:12 +0300
 
 
 
Peter Pentchev wrote:
 
Мда, а ще ми намериш ли компилатор, който при декларация char str[255] да
позволява str++, което ти беше написал (и сега снипна) и срещу което аз
всъщност възразих? :)
 
 
 gcc не позволява, и прави добре. Имам чувството, че съм виждал нещо 
такова преди десетина години, но не помня компилатора. Моя грешка, прав си.
 Също така не претендирам, че е добра практика да се ползва pointer 
аритметика, но винаги ми е било неприятно, когато аритметиката с 
указатели в С бива обявявана за абсолютно вредна. Естествено има 
рискове, но и затова трябва да се внимава. От друга страна с нея може да 
се спести време/памет/код.
 Е, разбира се, не може да се каже че това е добър стил, а и оставяме 
празно място, но е по-бързо. 8)
 
 
 
 
 Облещената усмивка на края на изречението трябваше да сигнализира 
здравословен сарказъм - т.е. и така може, но не правете като мен.
 
И какво правим после, когато се опитаме да направим free(sym)? ;)
 
 
 sym[] е алокирано статично - като локална променлива (т.е. в стека). Не 
можеш да му направиш free. Т.е. можеш, но най-вероятно ще получиш 
segfault или друга подобна красота. free е само за работи алокирани с 
malloc, calloc или realloc (функциите за работа с heap-а)
 
...и ако е алокиран статично (като char sym[255], а не char *sym), не
можеш да направиш sym++... а ако можеш да направиш sym++, то sym не е
алокиран статично, и значи или сочи към нещо, което *на друго място* е
алокирано статично, или сочи към динамично заделена памет... в който
случай, ако направиш sym++ и по-късно се опиташ да я освободиш, резилтатът
ще е много подобен на неща, които виждаме в последната година в BugTraq :)
 
 
 Естествено няма нужда да се освобождава всеки указател, който ни 
попадне. :) И char *sym не казва нищо за начина по който ще алокираме памет.
 
Но Дончо май е прав, че това е малко или повече (май повече) off-topic.
 
 
Абсолютно, така че се надявам с това да приключим треда. Мерси за лафа.
Поздрави,
Андро
============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================
 
 
 
      
      |  
     
    | 
   
    
    |