gpt4 book ai didi

c - 从函数返回 char** 时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:05 25 4
gpt4 key购买 nike

我有一个函数,它查找传入数组的罗马数字并将它们存储在字符串数组中,然后将字符串数组返回给 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com