Hi, anyone could me explain why the first get a runtime error and second is ok? thanks
Printable View
Because textLabel wasn't initialized and pointed to a random part of memory.
Or in addition to what everyone else has said you could do:Quote:
Originally Posted by mickey
or
Basic difference:
In the first example I give textLabel is allocated its own memory and the pointer points to that location. So changing textLabel would have no effect on QString s.
In the second example the pointer textLabel point to the memory location assigned to QString s so changes made to textLabel would show up in s as they are actually the same variable (as far as memory is concerned).
Michael
If I undesrtand: in this example texlabel point to a portion of memory empty....?Quote:
Originally Posted by michael
C++ provides the "new" and "delete" operaters to allocate and deallocate memeroy in your program as needed.Quote:
Originally Posted by mickey
The above code could be rewritten for easier explaination as
"QString s = "Some String";
As you probably know creates a new QString object named "s".
QString* stringPointer;
Tells the computer you are creating a new pointer that will point to an object in memory of type QString. However, at this point the pointer does not point to any memory location, or more correctly 0 or a random one. You could take this pointer and point it to the memory location of "s" with "stringPointer = &s" or you can allocate more memory to hold the object for this pointer using the new operator.
stringPointer = new QString(s);
This tells the computer to allocate a section of memory the size of a QString() and set the value of stringPointer to its memory location. Putting the "s" in QString() as "QString(s)" as defined in the QString constructor function QString::QString(QString string) also tells the computer to make sure that the new QString object created in memory should have the same text as the QString "s" you created earlier. You could have also created an empty QString pointer by calling "QString()" instead of "QString(s)".
And lastly if you are using pointers you should remember to delete them so as to not have a memory leak in your program using delete. So when you are done with your pointer you should call "delete stringPointer" IF and only if you allocted more memory for the pointer using "new".
I hope this helps you...
EDIT:
I thought I should add this about allocating and deallocating memory for QObjects etc. When you, for example, subclass a QObject class and create a pointer to newly allocated memory to a new QObject such as a QPushButton using "new" you do not need to call delete as Qt will keep up with it for you and delete the memory allocated for the pointer when the parent dies. See this tutorial for more information on that: http://doc.trolltech.com/4.1/tutorial-t4.html
会导致内存访问异常?