私が理解している限りでは、ポインターの配列を返し、その配列の指す対象にメモリを割り当てたいと考えています。現在のコードでは、ローカルであるため、ポインターの配列を返すことはできません。次の方法でそれを行うことができます。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char** loadValues () {
char** toReturn;
int i;
toReturn = malloc(5*sizeof(char*));
for(i=0;i<5;i++)
{
toReturn[i] = malloc(25); //Change the size as per your need
strncpy(toReturn[i], "string",i+1); //Something to copy
}
return toReturn;
}
int main()
{
int i;
char **arr = loadValues();
for(i=0;i<5;i++)
{
printf("%s\n", arr[i]);
}
for(i=0;i<5;i++)
{
free(arr[i]);
}
free(arr);
return 0;
}
の戻り値の型とloadValues
、配列に割り当てられたメモリが で解放されることに注意してくださいmain
。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void loadValues (char **toReturn) {
int i;
for(i=0;i<5;i++)
{
toReturn[i] = malloc(25); //Change the size as per your need
strncpy(toReturn[i], "string",i+1); //Something to copy
}
}
int main()
{
int i;
char *arr[5];
loadValues(arr);
for(i=0;i<5;i++)
{
printf("%s\n", arr[i]);
}
for(i=0;i<5;i++)
{
free(arr[i]);
}
return 0;
}
また、呼び出しがmalloc
成功したかどうかを確認し、エラーを処理する必要があります。