Prenons l'exemple suivant:C++: Trouble with Pointeurs, variables de boucle, et struct
#include <iostream>
#include <sstream>
#include <vector>
#include <wchar.h>
#include <stdlib.h>
using namespace std;
struct odp {
int f;
wchar_t* pstr;
};
int main()
{
vector<odp> vec;
ostringstream ss;
wchar_t base[5];
wcscpy_s(base, L"1234");
for (int i = 0; i < 4; i++)
{
odp foo;
foo.f = i;
wchar_t loopStr[1];
foo.pstr = loopStr; // wchar_t* = wchar_t ? Why does this work?
foo.pstr[0] = base[i];
vec.push_back(foo);
}
for (vector<odp>::iterator iter = vec.begin(); iter != vec.end(); iter++)
{
cout << "Vec contains: " << iter->f << ", " << *(iter->pstr) << endl;
}
}
Ce produit:
Vec contains: 0, 52
Vec contains: 1, 52
Vec contains: 2, 52
Vec contains: 3, 52
J'espère que chaque fois, iter->f
et iter->pstr
donnerait un autre résultat. Malheureusement, iter->pstr
est toujours le même.
Mon soupçon est que chaque fois à travers la boucle, un nouveau loopStr
est créé. Au lieu de le copier dans la structure, je ne fais que copier un pointeur. L'emplacement sur lequel le pointeur écrit est écrasé.
Comment puis-je éviter cela? Est-il possible de résoudre ce problème sans allouer de la mémoire sur le tas?