[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    Re: c++ question.
From:       Aurélien_Gâteau <agateau () kde ! org>
Date:       2010-09-04 22:10:41
Message-ID: 4C82C3E1.9040708 () kde ! org
[Download RAW message or body]

On 02/09/2010 22:15, Thomas Lübking wrote:
> This is a way to access (in this case) the last char of the previous element 
> (to eg. replace '\0' with ' ') but actually the particular example looks buggy 
> to me, since "wordlist[0][-1]" is NOT part of "wordlist[max_wordlist]" (which 
> starts at wordlist[0][0] with the first char of the first string.

wordlist is an array of char*. Each char* can point to arbitrary
addresses, not necessarily to the beginning of strings. It really
depends on what fill_words() does. If it initializes wordlist pointers
to point to the beginning of a word in a large string, then
wordlist[0][-1] may be safe:
If for example wordlist[0] = large_string + 3, then wordlist[0][0] is
the third character of large_string and wordlist[0][-1] is the second
character. But of course if wordlist[0] = large_string, then
wordlist[0][-1] is out of large_string and you are likely to experience
trouble.

> -> the loop should start at 1, run to words ("<=", or not, depends on what'S 
> intended) and access "i-1" in the second position.
> 
> So if it's not somehow guaranteed that there's NOT sth. usefull in this memory 
> portion, you get a mem corruption (i think, but maybe this is just beyond no 
> me ;-)
> 
> Cheers
> Thomas
> 
> 
> Am Thursday 02 September 2010 schrieb Jaime:
>> Hi,
>>   I do not know what this methods do,
>>   They use a [-1] array index, perhaps to do pointer arithmetic?, but
>> I do not know, it is the first time I see negative indexes in C++
>> arrays.
>>
>> They are in kdebase/runtime/kioslave/man/man2html.cpp
>> lines 2845, 3166, 3661, 3693, 3732, 3791, 4067 and 4163.
>> Here you have an extract:of the first case...
>>
>>     char *wordlist[max_wordlist];
>>     fill_words(c, wordlist, &words, true, &c);
>>     for (int i=0; i<words; i++)
>>     {
>>         if ((mode) || (inFMode))
>>         {
>>             out_html(" ");
>>             curpos++;
>>         }
>>         wordlist[i][-1]=' ';        <---------------- The unknown thing for
>> me out_html( set_font( (i&1) ? font2 : font1 ) );
>>         scan_troff(wordlist[i],1,NULL);
>>     }
>>
>> Best Regards.
> 

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic