Вы распределяете строку через переменную стека и сохраняете ее адрес?Это может вызвать проблему, которую вы описываете, когда вы возвращаетесь из функции, в которой вы размещаете.
Лучше выделить строку в куче (с новым оператором), а затем сохранить выделенный адрес кучи.например,
char* pNext = new char[50];
strcpy(pNext, ...);
data.push_back(make_pair(pNext, r));
Вы должны выполнить всю свою собственную работу с массивами символов -eg. Вы должны убедиться, что они обнулились, иначе вы получите непредвиденные результаты при их печати.
например,
pNext[49] = '\0';
Кроме того, помните, что когда вы закончите со строкой, выделенной для кучи, вы также должны удалить их.Символы * удаляются таким образом:
delete [] pNext;
Как уже говорили другие, есть другие реализации строк, которые вызовут у вас меньше головной боли.
Самым простым в использовании, вероятно, является CString, но он требует дополнительных затрат, включая реализацию MFC или реализацию ATL.std :: string, как уже упоминали другие, являются альтернативой.
надеюсь, это поможет!