Bob Moran wrote on: Friday, September 05, 2014 12:07 AM
> On Wed, Sep 3, 2014 at 1:29 PM, Nelson, Erik - 2 <
> erik.l.nel...@bankofamerica.com> wrote:
> 
> > Bob Moran wrote on Wednesday, September 03, 2014 12:45 PM
> > >
> > > One added note: My GUI is using QT4, where in this case the SQL
> text
> > > goes something like:
> > >
> > >       QString qstr = "select id, step, temp from protocols where id
> > > = %1";
> > >       qstr = qstr.arg(id);
> > >       char * str = (char*)qPrintable(qstr);
> > >       sqlite3_prepare_v2( db, str, qstr.Length+1, &stmt, NULL)
> > >
> >
> > That's pretty different than the pseudocode you presented earlier.
> >
> > From the docs for qPrintable
> > http://qt-project.org/doc/qt-4.8/qtglobal.html#qPrintable
> >
> > **********************
> > Returns str as a const char *. This is equivalent to
> > str.toLocal8Bit().constData().
> >
> > The char pointer will be invalid after the statement in which
> > qPrintable() is used. This is because the array returned by
> > toLocal8Bit() will fall out of scope.
> > ****************************
> >
> > Your str is likely pointing to memory that has been freed?
> >
> Are you implying that I must copy the text returned by qPrintable(sql)
> to a safe location before calling a method that uses it? I thought that
> the string would be valid until I return from the routine.

Based on my reading of the documentation, yes.  

The char pointer will be invalid after the *statement* in which qPrintable() is 
used.

You've already provided additional evidence that your string is pointing to 
unallocated memory... you previously wrote

>Bob Moran wrote on 03. September 2014 06:25
>>I discovered that a malloc call for 500+ bytes was returning a pointer 8 
>>bytes below my SQL string

On the face of it, I'd suggest that indicates that the memory pointed by your 
char* has been reallocated since it was returned to the free store.

Also, as Alessandro mentioned, the length you're using is likely unreliable.

Erik

----------------------------------------------------------------------
This message, and any attachments, is for the intended recipient(s) only, may 
contain information that is privileged, confidential and/or proprietary and 
subject to important terms and conditions available at 
http://www.bankofamerica.com/emaildisclaimer.   If you are not the intended 
recipient, please delete this message.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to