我的結構類型推結構數據類型爲載體
struct SegData
{
Ogre::Vector3 startPt;
Ogre::Vector3 endPt;
float r,g,b;
float velBeg , velEnd;
};
SegData seg;
我有
std::vector< SegData> temp;
我試圖型SegData的數據推回我的矢量臨時的向量。
seg.startPt = Ogre::Vector3(0,0,0);
seg.endPt = Ogre::Vector3(1,1,1);
seg.r = 1;
seg.g = 1;
seg.b = 1;
temp.push_back(SegData());
temp.push_back(seg);
我無法推回向量temp中的元素seg並導致「分段錯誤(核心轉儲)」。
有人可以幫我在這裏。我不知道發生了什麼事。
編輯
我重新啓動我的筆記本電腦和段錯誤消失。但我得到奇怪的數組大小。我張貼下面的代碼:
SegData seg;
std::vector< SegData> temp;
zeroVec = Ogre::Vector3(0,0,0);
posStart = Ogre::Vector3(msg->segments[j].S.position.x,msg->segments[j].S.position.y,
msg->segments[j].S.position.z);
posEnd = Ogre::Vector3(msg->segments[j].line.E.position.x,msg->segments[j].line.E.position.y,
msg->segments[j].line.E.position.z);
//This is a pointer of class rviz::Line that helps plot line
lineVisual->setPoints(posStart,posEnd);
posLeft = posStart;
//Loop for pushing in the segData into Vector
if(posStart!= zeroVec && posEnd!= zeroVec)
{
float dist = posStart.distance(posEnd);
if (dist<1) dist = 1.0;
if (segVec.size() == 0 || flag<id)
{
ROS_INFO_STREAM("INSERTING NEW ELEMENT FOR ID"<<id); //id is passed on to this function
segVec.push_back(std::vector<SegData>());
flag = id;
}
for(float i = 1.0; i<= int(dist); i++)
{
posRight.x = posStart.x+ (posEnd.x - posStart.x)*(i/dist);
posRight.y = posStart.y+ (posEnd.y - posStart.y)*(i/dist);
posRight.z = 0;
posLeft = posRight;
seg.startPt = posLeft;
seg.endPt = posRight;
seg.r = 1;
seg.g = 1;
seg.b = 1;
temp.push_back(SegData());
ROS_INFO_STREAM("pushing inside temp of size "<<temp.size());
temp.push_back(seg);
ROS_INFO_STREAM("SIZE OF SEGVEC AT ID: "<<id<<" IS: "<<segVec[id].size());
}
segVec.push_back(temp);
輸出:
PROCESS MESSAGE
[ INFO] [1470169803.527734377]: INSERTING NEW ELEMENT FOR ID0
[ INFO] [1470169803.528113954]: pushing inside temp of size 1
[ INFO] [1470169803.528180252]: SIZE OF SEGVEC AT ID: 0 IS: 0
[ INFO] [1470169803.528206653]: pushing inside temp of size 3
[ INFO] [1470169803.528227194]: SIZE OF SEGVEC AT ID: 0 IS: 0
[ INFO] [1470169803.528250226]: pushing inside temp of size 5
[ INFO] [1470169803.528270518]: SIZE OF SEGVEC AT ID: 0 IS: 0
//For the next ID
PROCESS MESSAGE
[ INFO] [1470169810.320975693]: INSERTING NEW ELEMENT FOR ID1
[ INFO] [1470169810.321037171]: pushing inside temp of size 1
[ INFO] [1470169810.321063642]: SIZE OF SEGVEC AT ID: 1 IS: 5030930206624027720
[ INFO] [1470169810.321093659]: pushing inside temp of size 3
[ INFO] [1470169810.321117828]: SIZE OF SEGVEC AT ID: 1 IS: 5030930206624027720
[ INFO] [1470169810.321141908]: pushing inside temp of size 5
爲什麼我的矢量大小迅速擴大?
你確定它不是'temp.push_back(SegData());'是否導致了這個問題? – ArchbishopOfBanterbury
我不確定。我認爲這是我們應該推新的結構元素。那是錯的嗎? – Greatgoing
註釋掉這條線,看看是否仍然出現分段錯誤,可能是默認構建'Ogre :: Vector3'對象的問題,但我不確定,因爲我不知道它們是什麼。 – ArchbishopOfBanterbury