Deleting dynamic arrays

My main concern is worrying about having a memory leak due to a program crashing before it has the chance to reach the line of code in which technically releases its memory. What I do not understand is, if the program does crashes before it can release the memory of any dynamic arrays, wouldn't the memory leak still exist the next time you run the program and causing the leak to get worse each time?
for example, if I had something like this...
int main()
int *a = new int[10];
bool game = true;
// then for some reason the program crashes somewhere along these lines...
while(game) {
do some code in which some reason cause the program to crash
delete [] a;
return 0;
here in the example, if the program had crashed inside the while loop, wouldn't I have a memory leak which exist forever?

BnTheMan wrote:
The first instance is I wanted to know after reading some topics on the internet, I have heard that is is not a good Idea to set a pointer to know inside of a constructer class like this...
should you do this, or does it depend on the compiler that you use, and what about if you are using XCode?
Did you mean to type "not a good Idea to set a pointer to NULL"? That is what you code seems to say.
They key part is memory management. People have been screwing that up for decades. You should initialize pointers to NULL or 0 (same thing) before using them. Then, when you are done with them, if they aren't NULL, you must release them. Even if you haven't allocated a pointer, you can always release it if it is NULL using free(), delete, or release - depending on what language you are using.
If you allocate a pointer, then release its memory, you should re-set it back to NULL immediately if there is any chance that some other bit of code could try to release the memory. If you try to free a pointer twice, your app will crash.
All this is true in any environment that doesn't have garbage collection. Don't think that garbage collection is the panacea it is made out to be. It is better to be able to manage your own memory when you need to. Plus, there are more system resources than just memory.
2. The next thing I noticed was that it did not have any memory releasing code for when there is a problem with reading the file, such as if the file could not be opened. So I am wondering if something was to happen when opening the second MD2 file, in that it could not open the file because it was currupted, and I did something like this...
MD2_Object::loadObject() {
ifstream inFile;
char buffer[64];
inFile.open(myFile, istream::binary);
if(!inFile) {
... the code I need to my question
How can I tell the program that there was an error and that it needs to release the memory from the first dynamic array variable?
(I added some { code } statements to format your code nicely. Reply to this post to see how I did it.)
That is a good question, with several caveats. In your example, you are actually using static variables, not dynamic. All of your data is allocated on the stack. You didn't use any sort of malloc(), new, alloc, etc. Therefore, memory management is easy. When the current scope ends (usually the code between braces) anything allocated on the stack automatically goes away cleanly. Plus, since the stack is much more low level than dynamic memory, you can do stack allocations much more quickly.
But, had used dynamic allocation, this would be an issue. It is a significant problem that is rarely handled correctly. If there is an error, you need to release any resources (such as memory) that you have allocated. There are a number of ways to handle this, depending on your language and how you want to do it.
The first solution is to exploit the fact that, in C++, you can declare your variables anywhere you want. They don't have to be at the beginning of the scope. The best thing to do is don't allocate resources unless you know you can use them. If you fail halfway through, you would have to release all resources that you had allocated up to that point.
Some other ideas are to use exceptions and wrap allocations in classes such as auto_ptr. Then, when you encounter an error, you throw and exception and you use the stack scoping rules, though static wrapper variables, to release dynamic data underneath.
Yeah, it gets complicated. Maybe most more code that precisely shows what you are concerned with. Wrap your code between two lines of
{ code }
{ code }
without the spaces and it will print out nicely. So far, it looks like you are doing everything correctly. Sometimes, instead of asking how to do something, you'll get better responses by just posting how you do it and, if there are any problems, people will pick it apart Harsh, but effective.

Similar Messages

  • Memory/Speed of Split 1D array vs Delete from array

    Just wondering how Split 1D array works - does it create two new arrays in a new section of memory or does it just split the existing array in two, reusing the memory in place. (assuming that the original array is not needed elsewhere). If the latter is the case then presumably it is more efficient to use split array than delete from array if I want to remove element(s) from the beginning or end of the array. Is there a speed advantage as well?
    If I use split array but don't then use one of the output arrays is that memory deallocated or does the array remain in memory?
    Thanks
    Dave

    Ok please ignore the results I posted earlier, they are rubbish - not least because I got the column headings mixed up but also because my code was full of bugs
    So, here is a revised table, and the code - which hopefully only contains a few bugs... I'm not clued into benchmarking yet so please feel free to rip the code apart.
    I still get different results depending on where in the array I split it, most noticeably with subset and reshape. There is no effect with split. I'm guessing this is to do with the memory allocation. (I have not preallocated memory in my code, but I did wire the output arrays to Index Array)
    Message Edited by DavidU on 08-12-2008 04:49 PM
    Attachments:
    Benchmarks 2.png ‏13 KB
    split array test.vi ‏25 KB

  • Populating a dynamic array with objects and managing it in runtime.

    So I'm another stuck firstyear. I'll try and make my question compact. I'm using Flash CS6 and have drawn an animated character on the stage that consists of separate parts that are animated and its head is a separate class/symbol entirely because it has not only animation, but a state switch timeline as well. This said Head extends the Main that is the character MovieClip.
    I am using a dynamic array to store and .push and .splice objects of another class that would collide with this said Head.
    I also discovered the super() function that is implicitly called as the constructor of the parent in any child class that extends the parent, in this case Head extends Main. The issue is that my collidable object array is populated within the main, within the function that spawns every next collidable object with a TimerEvent. This said function then gets called twice due to the super() call.
    I have tried putting this super() call into an impossible statement in my child class, but it doesn't change a thing, and it was said that this method is unsafe so I don't even know if it should be working.
    However what confuses me the most is when I trace() the .length of my collidable object array at the end of that function. As I said earlier, the original function both spawns an object after a period of Timer(1000) and adds it to the stage as well as adds the object onto the object array, but the super() constructor only duplicates the length call and a creates a copy of the object on the stage, but it does not add the second copy of the object onto the array. The trace() output goes on like so:
    1
    1
    2
    2
    3
    3
    4
    4
    etc.
    I wonder why and I'm really stumped by this.
    Here is the code in question:
    public class Main extends MovieClip {
                        public var nicesnowflake: fallingsnow;
                        var nicesnowflakespawntimer: Timer = new Timer(1000);
                        public var nicesnowflakearray: Array = new Array();
                        public function Main() {
                                  nicesnowflakespawntimer.addEventListener(TimerEvent.TIMER, nicesnowflakespawn);
                                  nicesnowflakespawntimer.start();
                        public function nicesnowflakespawn(event:TimerEvent) : void {
                                  nicesnowflake = new fallingsnow;
                                  nicesnowflake.x = Math.random()* stage.stageWidth;
                                  nicesnowflake.y = - stage.stageHeight + 100;
                                  nicesnowflakearray.push(nicesnowflake);
                                  stage.addChild(nicesnowflake);
                                  trace(nicesnowflakearray.length);
                                  for (var i:Number = 0; i < nicesnowflakearray.length; i++){
                                            nicesnowflakearray[i].addEventListener(Event.ENTER_FRAME, snowhit);
                        public function snowhit(event:Event) : void {
                                  if (nicesnowflakearray[0].y >= 460){
                                            if (nicesnowflakearray[0].y == stage.stageHeight) {
                                            nicesnowflakearray.splice(nicesnowflakearray.indexOf(nicesnowflake), 1);
                                  //if (this.hitTestObject(nicesnowflake)){
                                            //trace("hit");
    I am also fiddling with the collision, but I believe that it would sort itself out when I deal with the array pop and depop properly. However I'm pasting it anyway in case the issue is subtly hidden somewhere I'm not looking for it. And here is the child class:
    public class Head extends Main {
                        public function Head(){
                                  if (false){
                                            super();
                                  this.stop();
    So like what happens at the moment is that the array gets populated by the first object that spawns, but there is two objects on the stage, then when the objects reach stage.460y mark the array splices() the one object away and displays an error:
    "#1010: A term is undefined and has no properties.
              at Main/snowhit()"
    then when the next object spawns, it repeats the process. Why does it trace the array.length as "1, 1, 2, 2, 3, 3, 4, 4, 5, 5, etc" until the despawn point and then goes on to display an error and then starts from 1 again, because if the array length is more than one object at the time when the first object of the array gets spliced away, shouldn't it go on as usual, since there are other objects in the array?
    Thank you very much to whomever will read this through.

    There are multiple problems:
    1. You should add eventlisteners for your objects only once, but you add eventlisteners every time your timer runs to all of your snowflakes, again and again:
                                  for (var i:Number = 0; i < nicesnowflakearray.length; i++){
                                            nicesnowflakearray[i].addEventListener(Event.ENTER_FRAME, snowhit);
    change it to
    nicesnowflake.addEventListener(Event.ENTER_FRAME, snowhit);
    I don`t see why its even necessary to employ this snowflakearray, it would be much straight forward if you simply let the snowflakes take care of themselves.
    2. Then you have to change your enterframe function accordingly
    public function snowhit(event:Event) : void {
                                  if (e.currentTarget.y >= 460){
                                            if (e.currentTarget.y == stage.stageHeight) {
                                            e.currentTarget.removeEventlistener(Event.ENTER_FRAME, snowhit);
                                            removeChild(e.currentTarget);
    3.
                                  //if (this.hitTestObject(nicesnowflake)){
                                            //trace("hit");
    since "this" is a reference to the Main class (root) it surely won`t function as you intend it to.
                                  if (false){
                                            super();
    makes no sense to use a condition that can never be true

  • Deletion of arrays during specific time intervals...how to get it working?

    i am trying to calculate the average peak values in a systolic pressure waveform during a specific time interval. for example, every 5 seconds, i want to average out all the peak values in that interval and after calculating the average, i want to delete the array of peak values. however, what i am finding is that the array is always 0 if i use the delete array in my vi. therefore, the average is always NaN, because the array is empty and there is a divide by 0 error....
    what should i do? i have been stuck on it for a long time now, thankyou very much"
    Attachments:
    help.vi ‏57 KB

    It is very difficult to make sense of your diagram, because all the control references are missing, so it is not possible to tell the various data sources apart.
    Where is the data coming from? How do you prevent race conditions between the acquisition and analysis parts?
    Overall, the diagram is overly complicated and very hard to read. For example clearing the array does not require reading the old array, measuring it's length, followed by "delete from array", followed by writing back to the array. Why don't you just wire an empty array to it? Same result! :-)
    You go to tremedous lenght calculating a simple array average, using numerous property reads and indexing arrays inside FOR loops. There is "mean.vi" that does it in one step. (If you only
    have base LabVIEW, it might not be available (?), so use "Sum" and divide by n. No loop needed). To find the largest element in an array, use "Array Max & Min" from the array palette, again in one simple step.
    I would highly recommend going over some LabVIEW tutorials or look at some of the shipped examples. Make yourself familiar with basic programming concepts such as auto-indexing at loop boundaries. An "index array" wired to the loop counter is never needed.
    I suspect that your problem is due to a race condition between acquisition and analysis code, but there is no way to tell unless you include all control references and also the companion VI that gets the raw data from the instrument.
    LabVIEW Champion . Do more with less code and in less time .

  • Dynamic array

    how to implement dynamic array size in java...??
    say if i want to add the element in an array then how should i do it..??

    For dynamic array...Vector is the best one i
    est one i think....
    Sigh. Unless other code requires it (for example, JTable's DefaultTableModel),
    Arraylist is preferred over the legacy class Vector.
    And even then I wouldn't recommend ArrayList as the "best" list. What if the OP
    wanted to have a FIFO queue? Would you recommend ArrayList/Vector over
    LinkedList?

  • Creating a dynamic Array

    Thanks for reply.
    I want to create a dynamic array and for this I used ArrayList Collection and Vector Class. I am using JDK 1.4.1 . But , I have a problem in that. In ArrayList, I used the following code:
    ArrayList al = new ArrayList();
    while(rs.next())
    al.add(rs.getString("Enter_Year"));
    al.add(rs.getString("UG_Production_Mi_Te"));
    al.add(rs.getString("OC_Production_Mi_Te"));
    al.add(rs.getString("Total_Production_Mi_Te"));
    al.add(rs.getString("OBR_MM3"));
    al.add(rs.getString("OMS_Te"));
    al.add(rs.getString("Coal_Offtake_Mi_Te"));
    al.add(rs.getString("Supply_to_Steel_Plant_Th_Te"));
    al.add(rs.getString("Royalty_SalesTax_MP_Crs"));
    al.add(rs.getString("Royalty_SalesTax_CG_Crs"));
    al.add(rs.getString("Total_ManPower"));
    al.add(rs.getString("Fatality_Rate_per_Mi_Te_Output"));
    al.add(rs.getString("Total_Wellfare_Expenditure_Crs"));
    String rpt[][] = new String[al.size()][];
    rpt = al.toArray(rpt); // ArrayStoreExecption error
    String colheads[] = {"...........My Table's Column names are here....."};
    JTable table = new JTable(rpt,colheads);
    JScrollPane jsp = new JScrollPane(table);
    add(jsp);
    At the statement having comment line I received the error ArrayStoreException. The JTable accepts the 2 D array for storing the info and I think the toArray() method is not working there and can't convert the ArrayList elements into an Array. Similarily, Vector Class is also not converting the elements into an array object and showing the same error only.
    Please help me to convert it into an array object so that I can pass it into the JTable argument.

    That isn't a jdbc problem but rather a collection problem.
    You certainly can't convert a one dimensional collection into a two dimensional array automatically. And that is what you are creating with the while loop.
    Since you know the column names you also know the inner array size so you can start by creating a statically sized string array (not collection) in the loop and add that to the outer collection. That might solve the problem.

  • How to delete Dynamically created input field UI Element

    Hi all,
              I want to delete dynamically created input field and label.
    Is there any method please tell.
    Thanks in advance
    Hemalatha

    Hi,
    In the WDEVENT parameter of the action handler you can find the event id.
    ***Variables
      DATA:
        lv_selected  type string.          "Selected tab value
    ***Structure and internal table for the Events and messages
      DATA:
        lt_events type WDR_EVENT_PARAMETER_LIST,
        ls_events type WDR_EVENT_PARAMETER.
    ***Field symbols
      field-symbols: <fs_value> type any.   "Attribute value in events table
    ***Move the event table to lt_events
      lt_events = wdevent->parameters.
      read table  lt_events into ls_events with key name = 'SAVE'.  "Button Id
      if sy-subrc eq 0.
        assign ls_events-value->* to <fs_value>.
        if sy-subrc eq 0.
          lv_selected  = <fs_value>.
        endif.                 "IF sy-subrc eq 0.
      endif.                 "IF sy-subrc eq 0.
    Regards,
    Lekha.

  • How to plot XY graph from 2 input of dynamic array ? ...

    I have 2 problem when I plot XY graph with 2 dynamic array :
    - I want to make the graph look like sweep chart. But it's seem not possible to use waveform graph?
    - The graph shoul move from left to right , then right to left, then left to right,.....
    Any one can give me some hints?  Thanks alot.
    Attachments:
    U1.PNG ‏21 KB
    XY radom value input.vi ‏147 KB

    I have to make Y change  from 0-10, then 10-0,.... Any one can help me to make it better?
    - How I shift the graph?
    Attachments:
    working_increse_decrease.vi ‏20 KB

  • Creating dynamic array

    Can anybody tell me how to create a dynamic array in Java??I dont want to fix size of array,it should take any number of values at runtime.Please tell me the syntax of using dynamic arrays.

    Hi,
    For creating an array of similar data elements, use
    ArrayList., but for storing elements which are in the
    form of object then use Vector...
    Best of Luck..
    R SWrong... the main different between ArrayList and Vector is that Vector was sychronized and ArrayList are not.

  • How can i maintain a dynamic array

    I want to maintain an dynamic array in my code . It shoud grow accroding to no of user inputs . 1 can entre 5 numbers and other 10 , then array size should grow orderly 5 and 10 like that . Array is int array.

    Read up on the Collections API. There is a tutorial on this site. At first blush, you want a List. If it will grow and you will not be removing and inserting constantly from the 'middle' of the list of items, then ArrayList is a logical choice as your List. Otherwise, use LinkedList. But definitely bone up on the tutorial. Understanding how Collections work is fundamental to any Java programming you will do.
    - Saish

  • Creating a dynamic array in Actionscript

    I am wondering how I would create a dynamic array in Acionscript, i.e. one that utilizes fields for mapping data like this:
    public var SMITH:Array = [
               {date:"29-Aug-05", close:45.87, profit:52},
               {date:"23-Aug-05", close:45.74, profit:32},
               {date:"21-Aug-05", close:45.77, profit:22},
               {date:"25-Aug-05", close:46.06, profit:51},
    but where you would just be reading in data without knowing what your data looks like.  In other words, I'd like to take something like a database table with X number of columns and have Actionsctipt map each row to an item in my array.  Something like this:
    for each row in table
    add {col1:value, col2:value, col3:value, ... colX:value} to Array
    So I won't know "date" or "close" or whatever at runtime, I'll just have X number of items for each element in the array. How would this be done?
    The reason I need this mapping feature is because I then want to map the table-like array as the data provider to charts, datagrids, etc.
    Thanks.

    If this post answers your question or helps, please mark it as such.
    You can download the lib for JSON in Flex here:
    http://code.google.com/p/as3corelib/downloads/list
    These pages describe using JSON and Flex, and databases:
    http://www.switchonthecode.com/tutorials/flex-php-tutorial-transmitting-data-using-json
    http://www.switchonthecode.com/tutorials/using-flex-php-and-json-to-modify-a-mysql-databas e
    http://www.switchonthecode.com/tutorials/flex-php-json-mysql-advanced-updating
    http://www.mikechambers.com/blog/2006/03/28/tutorial-using-json-with-flex-2-and-actionscri pt-3/

  • Can somebody help me with deleting an array

    Can somebody help with deleting an array

    Hi Sansom,
    If you want to delete an array rather than format a volume you need RAID Admin which can be downloaded here.
    http://support.apple.com/kb/DL288  if you just want to delete the contents of the volume you can do this with Disk Utility.
    You'll also need to make sure the Xserve RAID is plugged in with one Ethernet connection and is on the same network as the machine you run RAID admin on.
    Then run RAID Admin and enter the password. In General the password is "private" to make changes or "public" to view the configuration.
    Hope that helps
    Beatle

  • Store int values into dynamic array

    Hello all,
    I'm a newbie in JAVA whose want to store int values (coming from a resultset) into an dynamic array. I know that normally to create a "dynamic array" you'd better use a Vector, but it seems that I don't know how to use it correctly (throws me a exception as : Incompatible type for method. Can't convert int[] to java.lang.Object[]).
    Thanks in advance
    STF

    I want to use the copyInto method of the vector, but it throw me an exception as ')' expected
    I include a snip of my code below ;
    Vector v= new Vector();
    Vector vv=new Vector();
    String[] labels=new String[v.size()];
    Integer[] values=new Integer[vv.size()];
    cont=rs.getInt("COUNT(CASE_ID_)");
    vv.add(j,new Integer(cont));
    log=rs.getString("ORIG_SUBMITTER");
    v.add(j,new String(log));
    v.copyInto(String[] labels);
    vv.copyInto(Integer[] values);

  • Multidimensional dynamic arrays?

    Is there already (jdk 1.5) a dynamic array object for multiple dimensions? There is a dynamic ArrayList for 1-dimensional arrays. For multidemsional arrays, I just put ArrayList into ArrayList into ... as a workaround. But the retrievel of elements is rather clumsy - I would like to have something like MultiArrayList and get the element from a 2-dimensional MultiArrayList like
    myMultiArrayList.get(x, y);
    I havent' found such an object so far in the 1.5 javadocs. Is there any?

    Well, I'm thinking of something like
    MultiArrayList mal = new MultiArrayList(2); //2 = 2
    dimensions
    mal.set(value1, 0, 0); //set value1 at [0,0]Would you have one array of length 1 after that?
    And if I call, set(value, 100,100), do I end up with 100 arrays of length 100?
    What if I do this?
    MultiArrayList mal = new MultiArrayList(2);
    mal.set(value1, 0, 100);What do the arrays look like after that. Your idea seems very reasonable but you have specified how they will behave dynamically. I can think of several different ways off the top of my head.

  • Dynamic arrays

    Hi all,
    I am controlling a two level stepper motor via  a USB 6009. I created the pulses using software timing by setting an array of elements to change between 0 and 5 V continuously as shown in the attachement. The probelm now is that i want to be able to control the number of degrees that the motor moves by so say 1 degree = 35 elements in the array. How do I do that using dynamic arrays? i'd like to be able to specify the number of degrees and hence the number of elements in the array of values 0 and 5. I am completely new to labView so any ideas or examples will be great.
    Thank you
    Myriam
    Attachments:
    PulseMotSelect.vi ‏79 KB

    Thank you very much for your prompt answer. I thought the built in signal generation functions require a clock and the USB does not have a clock on it. That is why I am using software timing. If it is still possibel to use the buillt in signal generation functions then where do i get them from on Labview if i want to create a square pulse? and yes i did create them all by hand becuase i didnt know where these functions are and if they would work with USB 6009 without the clock.
    With the code that I have sent you, the motor moves continuously once the usb is connected. The only way i can stop it is if i unplug the USB.  What i want to be able to do is to be able to conrol the motor so that it stops after a certain number of degrees specified by the user. This is what i wanted the dynamic array for. Another way that i thought of for doing that is using a timed loop to control the motor motion instead. So say it takes 1 sec to move 1 degree then 30 secs to move one degree and use that to control the degree of motion rather than the elements in the array. Would that still work? if not then how can i modify the array to do that? as it moves continuously with 1500 elements so how can i limit when it stops?
    Sorry if my problem is too complicated but i am new to labview so any help is welcome.
    Thank you in advnace for your help
    Myriam

Maybe you are looking for

  • What is the difference between Public and Protected Attributes

    hi ppl,          what is the difference if i declare attributes under public or protected to access the private method.for both (public or private) section iam getting the same result. CLASS CL DEFINITION. *protected section.   public section. DATA:

  • Why are some text pages converted to png's?

    I'm sure this has been covered to death but why does this happen? Here are two pages: this one converted to png: http://web.mac.com/neoverse/iWeb/Josh_Mobley/Blog/78282A4A-E25D-4F67-94C7-1F20F3 3D6FB3.html and this one which is not: http://web.mac.co

  • How to open a photo from iPhoto and edit in photoshopelements 12?

    How do I open a photo to edit in photoshop elements 12 from iPhoto?

  • Dock Cable Extension

    Got an 80gb iPod classic, a case, and Quicksilver portable speakers for Christmas. Lucky me! My problem is this -- it is difficult to take the iPod out of the case, and I have to take it out of the case to use the dock connector with the Quicksilver

  • Java 7 update 17 not working in firefox 19

    after updating to update 17, I can not use yahoo games anymore or any other site that uses java. I am running win 7 on my desktop. I never had this problem with java before. What can I do? I have clicked on the red icon in the browser window, but whe