Missing call for SCI_ANNOTATIONGETTEXT in, QsciScintilla::annotation?

Roland Hughes roland at logikalsolutions.com
Fri Mar 20 11:19:10 GMT 2026


On 3/20/2026 5:12 AM, Moritz Wenk wrote:
> Is this a bug in QsciScintilla::annotation() (from qsciscintilla.cpp in version 2.14.1) ? The variable ?buf? is never initialized with anything.
>
> // Get the annotation for a line, if any.
> QString QsciScintilla::annotation(int line) const
> {
>      int size = SendScintilla(SCI_ANNOTATIONGETTEXT, line, (const char *)0);
>      char *buf = new char[size + 1];
>
>      QString qs = bytesAsText(buf, size);
>      delete[] buf;
>
>      return qs;
> }

I think you need some sleep my friend. Not putting you down, I get tired 
too. 😴In an allergy/sinus fog while writing this. 😵

char *buf = new char[size + 1];

new char[size + 1] allocates a contiguous byte buffer and returns a 
pointer to it. (Assuming you are on a little computer that uses 8-bit 
bytes as character arrays. On a Unisys mainframe with 36-bit words the 
discussion would be more complicated.

The pointer variable "buf" then gets assigned the pointer value returned 
by the new operation. This initializes it.

Unless compiled in debug mode, the new operation does not initialize. 
The allocated memory contains garbage. Almost nobody does it, but C++ 03 
added () to initialize allocations.

https://en.wikipedia.org/wiki/C%2B%2B03

new char[size + 1]();

Would allocate a character array that was nulled out. It will do the 
same for any array created via new. It is more efficient than

new char[size + 1]{};

I can't find it now, sinus fog, but almost every Assembly language I've 
ever worked with has an instruction to zero fill a block. Some CISC 
machines allow you to allocate a zero filled block all in one 
instruction. The () notation typically uses that. The list notation {} 
typically has to use a loop.

The specialized Assembly language instructions got added to processors 
in the late 1960s-early-1970s so COBOL compilers could MOVE ZEROS, MOVE 
SPACES, and MOVE HIGH-VALUES to blocks of memory efficiently.

https://www.ibm.com/docs/en/cobol-zos/6.3.0?topic=literals-figurative-constants

Every native compiled language to exist since then has made use of these 
instructions under the hood.

Don't feel bad. I've been in IT 40 years now. Probably written over a 
million lines of C++. I've never used the () initializer. Never 
encountered code that did.

-- 
Roland Hughes, President
Logikal Solutions
(630)-205-1593  (cell)
https://theminimumyouneedtoknow.com
https://infiniteexposure.net
https://johnsmith-book.com



More information about the QScintilla mailing list