gpt4 book ai didi

c++ - 有人能告诉我为什么我的代码会在 SPOJ 上生成分段吗?什么是段错误?(FCTRL2)

转载 作者:行者123 更新时间:2023-11-30 04:39:26 26 4
gpt4 key购买 nike

#include<stdio.h>
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
char arr[200],res[200];
char table[150][200];

string multiply(char n[],int m)
{
int N=strlen(n),M,temp=0,x=0;
for(int i=0;i<N;i++)
arr[i]=n[N-1-i];
for(int i=0;i<N;i++)
{
x=m*(arr[i]-'0')+temp;
x=m*(arr[i]-'0')+temp;
arr[i]=(x%10)+'0';
temp=x/10;
}
while(temp>0)
{
arr[N]=(temp%10)+'0';
temp/=10;
N++;
}
M=strlen(arr);
for(int i=0;i<M;i++)
res[i]=arr[M-1-i];
}
void make_table()
{
table[0][0]='1';
for(int i=1;i<101;i++)
{
multiply(table[i-1],i);
int u=strlen(res);
for(int j=0;j<u;j++)
{
table[i][j]=res[j];
}
}
}
int main()
{
int tc,n;
scanf(" %d",&tc);
make_table();
while(tc--)
{
scanf(" %d",&n);
printf("%s\n",&table[n]);
}
return 0;
}

这是我解决这个问题的代码:http://www.spoj.pl/problems/FCTRL2/它为我生成正确的答案,但是当我提交它时,它告诉我运行时错误(段错误)。谁能向我解释什么是段错误?因为我在 spoj 网站上阅读了它,但我不明白如何避免它以及如何升级我的代码?

最佳答案

如果将函数的返回类型从 string 替换为 void,段错误就消失了。

当您尝试读/写您无权访问的内存时,会发生段错误。例如,您可以尝试在只读内存上写入,或在地址 0x00000000 处读取。实现段错误的一种常见方法是使用未初始化的指针。

调试器通常是查找段错误的好 helper ,因为它会停止并向您显示发生的位置。

关于c++ - 有人能告诉我为什么我的代码会在 SPOJ 上生成分段吗?什么是段错误?(FCTRL2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2237582/

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