gcc 4.4.3 c89
I have the following source code. And getting a stack dump on the printf.
char **devices;
devices = malloc(10 * sizeof(char*));
strcpy(devices[0], "smxxxx1");
printf("[ %s ]\n", devices[0]); /* Stack dump trying to print */
I am thinking that this should create an char array like this.
devices[0]
devices[1]
devices[2]
devices[4]
etc
And each element I can store my strings.
Many thanks for any suggestions,
== Added correction ===
for(i = 0; i < 10; i++)
{
devices[i] = malloc(strlen("smxxxx1")+1);
}
You have allocated memory for an array of pointers. You need to allocate the memory for each element to store the string
e.g.
#define NUM_ELEMENTS 10
char **devices;
devices = malloc(NUM_ELEMENTS * sizeof(char*));
for ( int i = 0; i < NUM_ELEMENTS; i++)
{
devices[i] = malloc( length_of string + 1 );
}
devices[0] is a char *
, but you haven't allocated any storage for it. Do this instead:
char **devices;
devices = malloc(10 * sizeof(char*));
devices[0] = strdup("smxxxx1");
printf("[ %s ]\n", devices[0]);
Eventually, you'll have to free the memory allocated by strdup()
:
free(devices[0]);
You have allocated memory for storing 10 char pointers. To store a string at these memory location you have to allocate memory for each of them. Basically you need something like device[0] = malloc(stringLen + 1);
for each pointer.
You only have allocated an array of pointers to character-arrays. You will have to allocate memory for each string you plan to store:
char **devices;
devices = malloc(10 * sizeof(char*));
//Added this line:
devices[0] = (char*)malloc(strlen("smxxxx1")+1);
strcpy(devices[0], "smxxxx1\0");
printf("[ %s ]\n", devices[0]); /* Stack dump trying to print */
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With