[英]C++:Linker command with exit code -1 in xcode
當出現以下錯誤時,我正在使用C ++在xcode中實現后綴數組:
ld: 32-bit RIP relative reference out of range (100000121018926 max is +/-4GB): from _main (0x100001310) to _L (0x5AF417B0F130) in '_main' from /Users/priya/Library/Developer/Xcode/DerivedData/cfquestions-boqlvazrozappdeetfhesfsohczs/Build/Intermediates/cfquestions.build/Debug/cfquestions.build/Objects-normal/x86_64/main.o for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我的后綴數組代碼如下:
char a[size1];
int ans[size2][size2];
struct node{
int gg[2],pos;
}L[size1];
int step=1,ct=1;
bool comp(node a, node b){
return a.gg[0]==b.gg[0]?(a.gg[1]<b.gg[1]?1:0):(a.gg[0]<b.gg[0]?1:0);
}
int main(){
int TT;
cin>>TT;
while(TT--){
set<int> s;
//a.clear();
int n=strlen(a);
scanf("%s",a);
for(int i=0;i<strlen(a);i++)ans[0][i]=a[i]-'a';
for(;ct<strlen(a);step++,ct<<=1){
for(int i=0;i<n;i++){
L[i].gg[0]=ans[step-1][i];
L[i].gg[1]=i+ct<n?ans[step-1][i+ct]:-1;
L[i].pos=i;
}
sort(L,L+n,comp);
for(int i=0;i<n;i++)
ans[step][L[i].pos]=i>0&&L[i].gg[0]==L[i-1].gg[0]&&L[i].gg[1]==L[i-1].gg[1]?ans[step][L[i-1].pos]:i;
}
for(int i=0;i<n;i++)
{
if(s.find(ans[step-1][i])!=s.end()){
}
else s.insert(ans[step-1][i]);
}
cout<<s.size()<<endl;
}
return 0;
}
PS:該代碼可以在任何其他代碼上正常運行。 我嘗試了更復雜的代碼; 但是效果很好。 因此,這段代碼肯定有問題-但我無法弄清楚是什么!
任何幫助,將不勝感激,謝謝!
編輯:原因是ans
的大小,正如@WhozCraig在添加大小后的注釋中指出的那樣。 我對為什么鏈接器錯誤消息名稱為_L
猜測是,編譯器將main
放置在一個較低的地址,然后將全局數據放置在順序中,從而使L
RIP偏移量太大。
在一個for循環中,您有i = 0
並訪問L[i-1]
,這對於數組index而言是一個非常大的數字。
編輯:但是應該給運行時失敗或錯誤,而不是鏈接程序錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.