From kde-devel Tue Nov 12 13:36:47 2013 From: =?iso-8859-1?Q?Thomas_L=FCbking?= Date: Tue, 12 Nov 2013 13:36:47 +0000 To: kde-devel Subject: Re: Not used QPointers showing modal dialogs via exec() - No crash Message-Id: <6412be6d-7802-4204-bde1-40a1b40f7e9d () gmail ! com> X-MARC-Message: https://marc.info/?l=kde-devel&m=138426310606538 On Dienstag, 12. November 2013 08:24:30 CEST, Harsh Kumar wrote: > 1. If there is some code after exec() then code will crash as the > QObject has been deleted. As long as there's no reference to any (pot.) freed memory, code after the nested eventloop is in general no problem (ie. you can still put "int i = 1; ++i;" etc. after the nested eventloop - no risk) > 2. Even if there is no code after exec(), there can be a crash when > stack is cleared while returning from the function. > However, the problem is that here we are not seeing a crash. It seems > the code can be potentially dangerous, but is not crashing in this > case. Notice that this case either implies: a) a nested loop QObject on the stack (crashes when the parent deconstructor deletes it [1]) b) you leak the heap object c) the nested heap object is local static or a member I assume that the "quit" case gets special treatment (closing all windows in proper order first, thus exiting the nested loop before deleting the parenting window) > 3. In any case, such nested eventloops should be avoided. But if used, > then object must be created on heap & there should be appropriate > checks before using the object to check if it is still valid. Yes. And as mentioned: *any* pointed memory that could be deleted during the nested loop (in theory more or less any non local heap pointer and esp. "this" and QObject's) should be guarded. Cheers, Thomas [1] #include int main(int argc, char **argv) { int i = 1; printf("a\n"); int *j = &i; printf("b\n"); delete j; // this will crash - stack deletion is illegal printf("c\n"); int k = i; printf("%d\n", k); } >> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<