Я занимаюсь разработкой небольшое приложение, которое первым добавляет некоторые значения в массив указателей определяется как глобальная переменная:Глобальная переменная массив теряет значения в потоке
#define MAX_LOCATIONS 32
LocationDTO* locations[MAX_LOCATIONS];
int nLocations = 0;
я использую следующий метод, чтобы добавить ссылки на объект LocationDTO в массив:
bool addLocation(Location *location, string name){
LocationDTO l(name, location);
if(nLocations < MAX_LOCATIONS){
locations[nLocations] = &l;
nLocations++;
return true;
}else{
return false;
}
}
И я называю эту функцию из основного метода таким образом:
Location l1(1,2);
addLocation(&l1, "one");
Location l2(2,3);
addLocation(&l2, "two");
Location l3(4,5);
addLocation(&l3, "three");
После того, как все значения добавлены, я начинаю поток, который будет обрабатывать этот массив. Определение темы:
void* server_thread(void* args){
// Some code
int i;
for(i=0; i < nLocations; i++){
LocationDTO* l = locations[i];
// More Code
}
}
Проблема заключается в том, что на данный момент в потоке, объекты, содержащиеся внутри locations
не имеет больше значения I, возложенный на них.
Возникает ли эта проблема, потому что я создаю объекты внутри addLocation
, а затем сохраняю ссылку в массиве?
l - локальная переменная. Он исчезает, когда функция заканчивается. Если вы хотите сохранить значение между вызовами, используйте новый оператор для выделения памяти в куче. – caveman