Jump to content

  • Log In with Google      Sign In   
  • Create Account

Problems with Malloc and Character array


Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.


  • You cannot reply to this topic
4 replies to this topic

#1   Members   -  Reputation: 101

Like
0Likes
Like

Posted 17 February 2008 - 02:20 AM

What is the best way to use malloc to declare an array of characters string? I've used the below method but when I read the values bad the data is all corrupted. Can somebody please show me the correct way to use malloc to declare an array of character strings? int array_Length; char * NamesList; array_Length = 140; NamesList = (char *) malloc(array_Length * sizeof(char )); if (NamesList == NULL) { printf("%s \n" "Memory allocation failed. Goodbye., ERROR_MESSGAE"); exit(EXIT_FAILURE); } Many thanks

#2   Members   -  Reputation: 2131

Like
0Likes
Like

Posted 17 February 2008 - 02:24 AM

The data that is pointed to after a successful malloc() is not guaranteed to be clear. The data in there will be garbage. Following this malloc you should be writing something meaningful to it in order for what you read out to make any sense at all.

May i suggest that you use std::string if you are writing your program in C++.

May i also suggest that you initialise the variables like so:


int array_Length( 140 );
char* NamesList( malloc( array_Length * sizeof( char ) ) );



#3   Members   -  Reputation: 101

Like
0Likes
Like

Posted 17 February 2008 - 03:52 AM

Hi Dave,

I'm sorry if I wasn't clear at first, however, I am writing some values to the NamesList array. I open a text file and read in the values from there. However, when I go to ready the values that is when I get all garbage. I've traced in debug mode the code and can confirmed that I'm populating the NamesList array.

On the point of using the c++ string, I would say yes, however, I want to learn the right way to use malloc to achieve this. Surely there must be a way?

Thanks

#4   Members   -  Reputation: 1591

Like
0Likes
Like

Posted 17 February 2008 - 04:20 AM

Quote:
Original post by gp343
What is the best way to use malloc to declare an array of characters string?


In C++, it's best not to use malloc at all: it interacts badly with most language features and forces you to handle the free/delete duality on your own. For allocating a buffer of characters, using new[] is an awkwardly superior solution (though inferior to both std::string and std::vector<char>). Typical use:

const int array_length = 140;
char *names_list = new char[length];

try
{
// Use 'names_list'
}
catch(...)
{
delete[] names_list;
throw;
}

delete[] names_list;


Don't forget the exception-handling code if the usage includes any non-primitive functions. Also, the allocation will throw an exception if it fails, unlike malloc which returns null.

As far as malloc in C goes, typical usage would be:

int array_length = 140;
char *names_list = malloc(array_length * sizeof(char*));

// Use 'names_list'

free (names_list);


Of course, the C version should not be used in C++ for obvious reasons (including exception-unsafety and type-unsafety).

#5   Members   -  Reputation: 101

Like
0Likes
Like

Posted 17 February 2008 - 04:21 AM

I solved, it. It was a mistake on my part - I was referencing a freed object :-)






Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.




PARTNERS