Sign in to follow this  

Problems with Malloc and Character array

This topic is 3589 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

Share this post


Link to post
Share on other sites
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 ) ) );

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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[array_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).

Share this post


Link to post
Share on other sites

This topic is 3589 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this