#python #c #cython
Вопрос:
Я просто хочу создать простую структуру C , которая имеет индекс int и значение серого цвета int .Функции задается вектор со значениями серого цвета. Когда я пытаюсь его скомпилировать, я получаю ошибку сегментации, кто-нибудь знает, почему? (не отсортировал вектор) Спасибо.
vector<gray> createStruct( vector<int> grayValues)
{
vector <gray> grayStruct;
for (int i = 0; i<grayValues.size();i )
{
grayStruct[i].originalIndex= i;
grayStruct[i].grayValue= grayValues[i];
}
return grayStruct;
}
int main() {
vector <int> grayVals={411,21,78,23};
vector <gray> grayStruct=createStruct(grayVals);
// sort(grayStruct);
for (int i = 0; i < grayStruct.size(); i )
{cout << grayStruct[i].originalIndex<<' '<<grayStruct[i].grayValue;
cout<<endl;
}
return 0;
}
Комментарии:
1. о , и это структура, извините: структура серого цвета { int originalIndex; int grayValue; };
2. Вы никогда не меняете размер
grayStruct
, отсюда и неопределенное поведение.3. @G. M. что значит изменить его размер?
4. Он создан с размером 0, и вы не выполняете никаких операций, которые изменят его размер (см. Ответ @MikeCAT ).
Ответ №1:
Это потому , что вы используете grayStruct
в функции элементы, которых на самом деле не существует createStruct
.
Вы должны создавать элементы перед использованием или использовать push_back()
для создания элементов.
Создавайте элементы с помощью конструктора:
vector<gray> createStruct( vector<int> grayValues)
{
vector <gray> grayStruct(grayValues.size()); // add number of elements to create
for (int i = 0; i<grayValues.size();i )
{
grayStruct[i].originalIndex= i;
grayStruct[i].grayValue= grayValues[i];
}
return grayStruct;
}
Создавайте элементы с помощью resize()
:
vector<gray> createStruct( vector<int> grayValues)
{
vector <gray> grayStruct;
grayStruct.resize(grayValues.size()); // create elements
for (int i = 0; i<grayValues.size();i )
{
grayStruct[i].originalIndex= i;
grayStruct[i].grayValue= grayValues[i];
}
return grayStruct;
}
Добавляйте элементы один за другим с помощью push_back()
:
vector<gray> createStruct( vector<int> grayValues)
{
vector <gray> grayStruct;
for (int i = 0; i<grayValues.size();i )
{
gray value;
value.originalIndex= i;
value.grayValue= grayValues[i];
grayStruct.push_back(value); // add an element
}
return grayStruct;
}
Комментарии:
1. О да, как я этого не заметил, большое спасибо