Dynamically allocating memory for const char string using malloc()
c, c++, const-char, const-pointer, malloc
Solution
The second line is "horribly" wrong:
char* c = (char*)malloc(6*sizeof(char));
// 'c' is set to point to a piece of allocated memory (typically located in the heap)
c = "hello";
// 'c' is set to point to a constant string (typically located in the code-section or in the data-section)
You are assigning variable `c` twice, so obviously, the first assignment has no meaning. It's like writing:
int i = 5;
i = 6;
On top of that, you "lose" the address of the allocated memory, so you will not be able to release it later.
You can change this function as follows:
char* m()
{
const char* s = "hello";
char* c = (char*)malloc(strlen(s)+1);
strcpy(c,s);
return c;
}
Keep in mind that whoever calls `char* p = m()`, will also have to call `free(p)` at some later point...
Problem
I am writing a program that reads a value from an .ini file, then passes the value into a function that accepts a PCSTR (i.e. const char *). The function is `getaddrinfo()`. So, I want to write `PCSTR ReadFromIni()`. To return a constant string, I plan on allocating memory using `malloc()` and casting the memory to a constant string. I will be able to get the exact number of characters that were read from the .ini file. Is that technique okay? I don't really know what else to do. The following example runs fine in Visual Studio 2013, and prints out "hello" as desired. ``` const char * m() { char * c = (char *)malloc(6 * sizeof(char)); c = "hello"; return (const char *)c; } int main(int argc, char * argv[]) { const char * d = m(); std::cout << d; // use PCSTR } ```