我有一个函数,它查找传入数组的罗马数字并将它们存储在字符串数组中,然后将字符串数组返回给 main()。但是当我尝试访问 main() 中返回的字符串数组时,代码由于段错误而失败。有人可以向我解释为什么会这样吗?我该如何更正我的代码?
在出现段错误和正常工作的代码中添加注释。非常感谢您的时间和帮助。
int find_lookup_index(int temp)
{
int j=0;
while(1)
{
if(temp>=lookup_int[j] && temp<lookup_int[j+1])
break;
j++;
}
return j;
}
char** romanizer(int num_size, int* num)
{
int i,j,temp;
char result[num_size][20];
for(i=0;i<num_size;i++)
{
strcpy(result[i],"\0");
if(num[i]%1000 == 0)
{
strcpy(result[i],"M");
continue;
}
j=find_lookup_index(num[i]);
temp=num[i];
while(temp>0)
{
strcpy(result[i],strcat(result[i],lookup_char[j]) );
temp = temp - lookup_int[j];
j = find_lookup_index(temp);
}
}
**/* WORKS CORRECTLY HERE */**
for(i=0;i<num_size;i++)
printf("%s\n",result[i]);
return (char **)result;
}
int main()
{
int size,i;
char **result;
int arr[3] = {3,11,499};
result = romanizer(3,arr);
**/* NOT WORKING - SEGMENTATION FAULT - WHY ? */**
for(i=0;i<3;i++)
printf("%s\n",result[i]);
return 0;
}
最佳答案
result
在堆栈上定义,当 romanizer
执行完毕时,它会从堆栈中“释放”出来。因此,当您的 main
尝试使用它时,它会出现段错误。
解决方案是malloc
数据结构(将其分配在堆上而不是堆栈上),并在不再需要时让调用者释放
。
关于c - 从函数返回 char** 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30690862/