C++ :: Using Malloc / Free Multiple Times Leaves Less Memory?
Apr 17, 2014
My application calls malloc in multiple subroutines, finally releasing all using free. This is done using my zalloc library (see my other post: [URL] .....
Somehow, when the applications tries to detect the available ammount of memory at the end of the test (allocating, freeing, testing), the freemem function gives me about 4-6MB less memory than at the start of the test? (out of 21MB available on the device at the start).
All memory is allocated and freed using the malloc/free routines within the library, with the exception of the SDL functions, which are registered externally on allocation and release.
View 3 Replies
ADVERTISEMENT
Nov 5, 2014
There is a part in the lesson that explains how malloc is used to allocate free memory to a pointer and gives us 2 examples:
Code:
float *ptr = malloc( sizeof(*ptr) ); and Code: float *ptr;
ptr = malloc( sizeof(*ptr) );
From my logic in the first case we allocate the memory to *ptr and in the second to ptr.
It's a bit confusing, am I missing something?
View 14 Replies
View Related
Jun 13, 2014
Consider this program:
Code:
// sb_string class v1.04
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct sb_string {
[Code] ....
And here is the output I got:
Code:
[harshvardhan@hari-rudra] ~/Desktop% gcc49 -o test test.c
[harshvardhan@hari-rudra] ~/Desktop% ./test
-before Value of len = 1
(in_function)-before Value of len = 1
(in_function)-after Value of len = 1
-after Value of len = 1 I was trying to make a little easier to work with string. Once the memory is allocated by malloc via sb_init() function, the sb_massacre function wasn't working to deallocate the memory. I had used multiple versions of gcc and clang but the result is same.
View 4 Replies
View Related
Apr 6, 2014
This program works as expected:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
unsigned long long int address;
float current;
unsigned char pressure_units;
}
[code]....
But I don't like how I had to use malloc and free. Is there a different way to accomplish copying the string into a char pointer without resorting to dynamic memory allocation?
View 1 Replies
View Related
Dec 22, 2012
Goal: To allocate some memory as a char*, read in some binary data, re-interpret it as a float* and then free the memory.
My code looks like:
void someFunction(float* &result) {
char * tmp = new char[1000];
//...Fill the char buffer here...
result = (float*)tmp; //Reinterpret binary data as floats
[Code] ....
Is the cast back to char* necessary on the red line (or could I have validly left it as float*)? Would it be different if I had written char * tmp = (char*)malloc(sizeof(char)*1000); on the blue line (and correspondingly used free (char*)floatData on the red line?
View 9 Replies
View Related
Jan 8, 2014
This compiles o.k.:
Code:
int main(void){
char *a;
a = (char*) malloc (100*sizeof(char));
[Code]....
I get an error saying "pointer being freed was not allocated". This happens for free(a), free(*a), free(&a), free(&*a).
So if I no longer need "1234567"... how do I get rid of this memory element?
View 7 Replies
View Related
Mar 16, 2014
I'm trying to free allocated memory for structure. It seems like free() gets only pointer and not regular types . my question is basic and simple – is passing pointer to free() frees the pointer or the variable it points at? or both?
View 2 Replies
View Related
Nov 22, 2013
How to free the memory and address,value
Server:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
[Code] .....
Client:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
[Code] .....
View 1 Replies
View Related
Feb 25, 2015
An attempt to create a class which is basically a mimic of vector<int> i don't seem to know how to delete pointer x in a destructor to free memory, also on pushback and pushfront methods, i can't free y when i implement delete[] y; y=NULL; i get some NULL out put when cout 'ing the object in main, why is that happening and how do i free memory y.
#include<iostream>
using namespace std;
class vectorOfint{
int* x;
int size;
public:
vectorOfint();
[Code] .....
View 6 Replies
View Related
Oct 17, 2014
Code:
int *p, ar[100];
p = (int *)malloc(sizeof ar);
.. *p is a pointer variable, but what means another * here --> (int *)?
View 3 Replies
View Related
Feb 26, 2013
Having some frustrating issues trying to free memory from a dynamically allocated array of pointers to linked lists. I think the problem is in how I initialize the pointers to NULL. Is there a more elegant way to have the program recognize that the list is empty so it knows to create a head node for the linked list in the function 'add_end_stub_to_array'?
I ran the code through Valgrind and it says that memory is definitely lost from this array.
This is the structure definition.
Code: struct stub_edge {
int loc_id;
int anim_type;
int mkt;
struct stub_edge *next_node;
};
Here is the code snippet from main allocating and deallocating memory to the array.
Code:
struct stub_edge **stub_list = (struct stub_edge **)malloc( sizeof(struct stub_edge *) * 12);
for (i = 0; i < 12; i++)
{
stub_list[i] = (struct stub_edge *)malloc(sizeof(struct stub_edge));
stub_list[i] = NULL;
}
stub_list = add_end_stub_to_array(end_stubs, stub_list);
destroy_end_stub_array(stub_list);
Here the function for adding nodes to the lists by reading through a dynamically allocated 2D array. (The end_stubs array is ordered by month and each linked list represents events occuring within the month).
Code:
struct stub_edge **add_end_stub_to_array(int **end_stubs, struct stub_edge **list)
{
long int i = 0;
int mon = 0;
struct stub_edge *current_node1;
struct stub_edge *new_node1;
int break1 = 0;
while(i < num_edges && break1 == 0 && mon < 12)
[Code]...
Here is the function for freeing memory from the list.
Code:
void destroy_end_stub_array(struct stub_edge **list)
{
if(list != NULL)
{
int mon = 0;
struct stub_edge *current_node1;
struct stub_edge *new_node1;
for(mon = 0; mon < 12; mon++)
[Code]...
View 1 Replies
View Related
Dec 1, 2014
I am writing a very basic database in C++ and I am accessing the data from a web browser. I am using the opensource Mongoose web server code....
I have an issue...
The way the DB works is this: on starting, the DB loads a json file of all of the data into it. I have a class called DatabaseLoader that does this - it is the class that gets rewritten depending on the data structure of the json.
This is passed to vectors (vector<Node*> and vector<Edge*>) as references from Graph object.
Once the DatabaseLoader has finished it can be destroyed and any memory allocated objects it created (except the ones in those two vectors).
From then on, the Graph object is in charge of all of the elements in the database that are stored in the two vectors. When the user browses to htpp://127.0.0.1:8000 they see the json representing each object in the vectors.
All good so far....
However, when I repeatedly hit refresh in my browser (and call me insane...) at quite a fast speed I get this error:
Code:
main(29855,0x7fff76763310) malloc: *** error for object 0x7f98b2829408: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
[1] 29855 abort ./main testing.json
It seems to me this would be if I tried to "delete" and object twice, or if one of my objects was overwriting memory somewhere. However I am not recreating anything, I am just looping over the vectors and printing out the content. When I refresh slowly, I dont see this happen - i did it quite a lot of times, but when I do it fast I think it is happening.
So is there any possibility of me hitting the c++ web server to quickly and it is trying to process the data twice, causing some sort of memory error - i.e do I need to implement threading or something??
I can paste code, but there is quite a lot now....
View 1 Replies
View Related
May 16, 2014
does memory reserved by malloc() get freed when the function it is called in finishes?
View 6 Replies
View Related
Sep 7, 2013
How can I view the number of bytes that have been allocated by using the malloc function?I tried:
mem = (float*)malloc(num*sizeof(float));
printf("The amount of memory allocated using malloc is %d.", mem);
Note: The variable "num" in my program is equal to 7.But every time I run the program, this value changes.
View 10 Replies
View Related
May 11, 2012
I have a question about the KLU library for LU factorization of sparse matrices. The KLU library accepts a pointer to a memory allocator function, by default it is malloc(). Then it uses this pointer to allocate the memory required.
I want to extend the library and I now have object of classes. I want to use the operator new instead of malloc to allocate the memory. In the same time I want the new operator to call the constructors of the objects. Is there a way to do it?
View 14 Replies
View Related
Feb 13, 2013
I'd like to know what happens if I use multiple calls to malloc() on one pointer (without free) in a single function. Here is the example:
void *data_thread(void *sockfd_ptr) {
int sockfd = *(int *) sockfd_ptr;
const int BUFSIZE = 5;
char recvmessage[BUFSIZE];
char *headerstr = NULL;
char *newheaderstr = NULL;
[code]....
what happens with newheaderstr every time malloc() is called. There isn't a realloc() or anything. I didn't think it looked right to keep using malloc() like that.
View 4 Replies
View Related
Mar 10, 2014
What is wrong with my function why does it spit out huge numbers? And how do i use malloc or calloc to create an array in dynamic memory, and return a pointer to this array
Code:
#include <stdio.h>#include <stdlib.h>
int fibonacci(int n)
{
int i;
long int fib[40];
fib[0]=0;
fib[1]=1;
for(i=2;i<n;i++){
fib[i] = fib[i-1] + fib[i-2];
[Code]....
View 12 Replies
View Related
Jul 23, 2012
When does malloc() return null ? I want to allocate a big virtual memory which can not possibly fit on RAM, so most of it will be stored on disk. I am going to access the data sequentially so at any one time the data I am working on will fit in RAM. So I am hoping the OS will move the required pages in and out of disk. I can achieve this behavior manually by allocating the required blocks on RAM but this is rather tedious. Say I have an array a[100][10000000000]. At any one time I am working only on a[i-1][], a[i][], a[i+1][] which can fit in RAM but not the whole array. So how do I allocate the array so that I can work on it using for loops for(i=0;i<100;i++) without handling the page movements myself?
View 2 Replies
View Related
Jan 26, 2013
I have a program which call only one time malloc at the start of the program. When running, I see with 'process-explorer.exe' that memory is growing in little steps. Is this normal? why?
Using Windows 7
View 5 Replies
View Related
Jan 8, 2014
I'm trying to keep track of the size of blocks of memory that a pointer points to. No matter what I do, this code below always outputs the integer 8.
If I change 1000 to 5, I still get 8. If I change it to 0, I get 8... If I change it to -1, I get 8. If I change int *a to double *a, I get 8. If I take away the & symbol, I get 8. If I use *& instead, I get 8.
Why? I want it to output 1000. If I change that to 500, I want it to output 500.
int *a;
a = malloc(1000 * sizeof(int));
int j = sizeof(&a);
printf("%d", j);
I want to build my skills where I can allocate, inspect and change memory sizes.
View 4 Replies
View Related
Apr 5, 2014
so i have to read a text file with an unknown number of lines and allocate memory to for the number of items in the text file.currently i read the entire file(counting the number of lines). i allocate memory according to the number of lines read and then use fseek() with an offset of zero to allow for the second read .
View 5 Replies
View Related
Sep 7, 2014
I have a question about SDL and drawing sprites (SDL surfaces). My idea is that the user can create a wall of separate sprites by create one sprite each time in the current mouseX and mouseY position, when the user push down the e-key. The problem is that I have no idea how I could draw the same sprite multiple times without to delete the previous one.
View 3 Replies
View Related
Sep 15, 2014
I've been stuck on this for hours, and have scoured the internet for any insight on this particular issue with no luck.
I'll simplify the problem here. I have a lines in an input file:
John Smith 1234 Main St New York
Carol Thomas 5678 5th Ave Columbus
...
and I am reading into character arrays using code like this:
infile.getline(name,20);
infile.getline(street,15);
infile.getline(city,10);
but when I print the output using something like this:
outfile << "Owner Name: " << name << endl;
outfile << "Address: " << street << city << endl;
(let's pretend I included spaces between the address components, which I omitted to save space)
I get an output file of:
Owner Name: John Smith
Address:
The output stops after the name variable, which I believe is stored correctly. I don't think anything is storing in the address pieces, this is the problem.
I think it's because I'm not using getline() properly in this case. Can you string together multiple getline()s like that?
If this was my design, I'd read in strings instead, but that is not possible in this case.
View 6 Replies
View Related
Sep 19, 2014
I've been working on a program that uses a reference counting class that I've written which works fine for objects that inherit from it however I now need to have the following setup:
class SBComponent : private Refcounted { /*stuff*/}
class ProxiedComponent : public SBComponent, private Refcounted {/*stuff*/}
The compiler gives the following warnings
warning: direct base ‘Refcounted’ inaccessible in ‘ProxiedComponent’ due to ambiguity
And then several repeats of the error:
error: request for member ‘bk’ is ambiguous
Back *b = bk<ProxiedComponent>();
bk is a templated function that's defined in Refcounted and returns a pointer of type <template arg>::Back (ProxiedComponent::Back in this case).
I don't understand why the call to bk is ambiguous as although there's two instances of Refcounted (there needs to be with the way I've designed it so I can't make it virtual) it's inheritance is private in both cases so there should only be one instance of it visible in ProxiedComponent.
View 7 Replies
View Related
Nov 6, 2014
I've been struggling with an object when trying to add it to a list with [Listname].push_back. You see, I have a list with some objects that will be rendered in the screen (Called objects) and a function to create a text box with some text. The function in question is the following:
void reprEv(int evNum, ALLEGRO_BITMAP *txtbxim) //Event to call, default text box image.
{
textBox *txtBox = new textBox("Line 1 ", "Line 2 ", "Line 3 ", "Line 4 ", "Line 5 ", textboximage);
objects.push_back(txtBox);
[Code]....
(txtNum is increased then space is pressed, and when certain screen (maxScreen) have been shown, then it will go to the playing state)
My problem begins when the text box is created, because it's supposed to add only 1 text box to objects list, but instead adds hundreds of text boxes to objects.
View 1 Replies
View Related
Oct 20, 2013
When you have to write data on a file in binary mode multiple times (without closing the file), is the put pointer left where you ended writing the last time, or do you have to use tellp() or seekp() again and again to make sure you write at the right place?
I would have the same question about the get pointer, does he stay in place after you're done reading something (without closing the file, of course), or do you have to set it back at the right place with seekg() ??
View 5 Replies
View Related