我是C++的新手,我的編譯器向我拋出一個錯誤,這對於理解可能是什麼行號是沒有幫助的。在C++中向量中的malloc錯誤
我的代碼是Add_1.cpp:
#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;
vector<int> plusOne(vector<int> &A) {
int start=-1;
for(int i=0;i<A.size()-1;i++)
{
if(A[i]>0)
{
break;
}
if(A[i]==0 && A[i+1]!=0)
{
start=i;
break;
}
}// Truncated Leading 0's
vector<int> ans(A.size()-start);
int flag=1;
for(int i=A.size()-1;i>start;i--)
{
if(A[i]==9)
{
if(flag==1)
{
ans[i+1]=0;
flag=1;
}
else
{
ans[i+1]=A[i];
}
}
else
{
ans[i+1]=A[i]+1;
flag=0;
}
}
for(int i=0; i<ans.size(); i++)
{
// cout<<"Here too"<<endl;
cout<< ans.at(i) <<" ";
}
// if(ans[0]==0)
// {
// vector<int> ans1(ans.size()-1);
// copy(A.begin()+1,A.end(), ans1.begin());
// return ans1;
// }
return ans;
}
int main()
{
vector <int> A ={0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9};
vector <int> k (plusOne(A));
// cout<<ans.size()<<endl;
for(int i=0; i<k.size(); i++)
{
// cout<<"Here too"<<endl;
cout<< k.at(i) <<" ";
}
cout<<endl;
return 0;
}
當我編譯(g++ -std=c++11 Add_1.cpp -o Add
)和run(./Add
),我拋出這個錯誤:
Add: malloc.c:2395: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted (core dumped)
我上閱讀了一下這個,我所知道的是,這樣的錯誤可能是由於錯誤地使用了指針引起的。我仍然不明白這與我的錯誤有什麼關係。
有人可以解釋代碼有什麼問題,應該如何解決?
該代碼託管在codepad。
此代碼的問題語句是:
鑑於表示爲數字的陣列,加一到數的非負數。而且,這些數字被存儲起來,使得最有效的數字位於列表的頭部。
您是否嘗試過使用調試器? –
如果(i [i] == 0 && A [i + 1]!= 0)'如果'i'在最後一個條目上,則超出邊界。之後你也會在循環中執行'i + 1',這取決於內容,'i'可能在最後一個條目上。在進行數組訪問時考慮*邊界條件* –
@ M.M:對於來自main的給定輸入,永遠不會達到邊界條件。錯誤在別處。儘管如此,我已經糾正了它,但並不能真正解決它。 – FlyingAura