begin process at 2012 05 29 19:13:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

new et delete


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

new et delete

vendredi 12 février 2010 à 16:57:41 | new et delete

Larwin

bonjour a tous,
je viens d'écrire une petite fonction mais celle ci me pose problème lors de la libération de variable...

la voici :

BOOL splitString (vector<wstring> & tokenArray, wstring & stringToSplit, const wchar_t *delimiter){
wchar_t *localStringCopy = NULL;
localStringCopy = new wchar_t[stringToSplit.size()];
wcscpy(localStringCopy, stringToSplit.c_str());
wchar_t *currentToken;
for (currentToken = wcstok(localStringCopy, delimiter); currentToken != NULL; currentToken = wcstok(NULL, delimiter)){
tokenArray.push_back(wstring(currentToken));}
delete[] localStringCopy;
return true;
}

le "delete[] localStringCopy;" plante, je me doute que la fonction wcstok y soit pour quelque chose mais je seche..., je suis vraiment obligé de la delete cette variable ? a la sortie de ma fonction le systeme s'en chargera t'il tout seul ?

Merci d'avance
vendredi 12 février 2010 à 23:43:38 | Re : new et delete

CptPingu

Administrateur CodeS-SourceS
Chez moi, j'ai repris ta fonction, et ça fonctionne avec quelques légères modifications (splitString). Néanmoins valgrind n'aime pas du tout (c'est un vérificateur mémoire). En effet, la fonction wcstok est éviter en C++ (on ne mélange pas C et C++).

Je t'ai mis une version full C++ qui est plus adaptée (et qui gère les délimiteurs multiples).

Quelques autres remarques:
- Jamais de using namespace std, voir: [ Lien ]
- Pas besoin d'utiliser NULL, préfère 0, voir: [ Lien ]

Code C/C++ :
#include <iostream>
#include <vector>

bool splitString(std::vector<std::wstring>& tokenArray,
		 const std::wstring& stringToSplit,
		 const wchar_t* delimiter)
{
  wchar_t* localStringCopy = 0;
  wchar_t* errorCallBack = 0;

  localStringCopy = new wchar_t[stringToSplit.size() + 1];
  wcscpy(localStringCopy, stringToSplit.c_str());
  localStringCopy[stringToSplit.size()] = 0;
  for (const wchar_t* currentToken = wcstok(localStringCopy, delimiter, &errorCallBack);
       currentToken != 0;
       currentToken = wcstok(0, delimiter, &errorCallBack)
       )
  {
    tokenArray.push_back(currentToken);
  }

  delete[] localStringCopy;

  return true;
}

void display(const std::vector<std::wstring>& tab)
{
  typedef std::vector<std::wstring>::const_iterator iter;

  const iter end = tab.end();
  for (iter it = tab.begin(); it != end; ++it)
    std::wcout << *it << std::endl;
}

void splitStringCpp(std::vector<std::wstring>& tokens,
		    const std::wstring& str,
		    const std::wstring& delimiters)
{
  std::wstring::size_type lastPos = str.find_first_not_of(delimiters, 0);
  std::wstring::size_type pos = str.find_first_of(delimiters, lastPos);

  while (std::wstring::npos != pos || std::wstring::npos != lastPos)
  {
    tokens.push_back(str.substr(lastPos, pos - lastPos));
    lastPos = str.find_first_not_of(delimiters, pos);
    pos = str.find_first_of(delimiters, lastPos);
  }
}


int main()
{
  const std::wstring s = L"Kikoo toto tutu tata";

  //   const wchar_t c = L' ';
  //   std::vector<std::wstring> tab;
  //   splitString(tab, s, &c);
  //   display(tab);

  const std::wstring delimiters = L" ";
  std::vector<std::wstring> tabCpp;
  splitStringCpp(tabCpp, s, delimiters);
  display(tabCpp);

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio


Cette discussion est classée dans : fonction, wchar, delete, localstringcopy, currenttoken


Répondre à ce message

Sujets en rapport avec ce message

net use * /delete EN C++ [ par LeBobo ] Salut. J'ai un petit programme qui utilise la fonction : system(''net use * /delete'') ; Le problème est que mon programme à une interface graphique w delete et destructeurs [ par anne-lise ] Bonjour, voila j'ai un probleme que je ne peux resoudre depuis un moment deja. J'ai une fonction de ce type :float* function(float* input1, MaClasse i Fonction dans une structure ? [ par mayti ] Bonjour, voilà j'esseye d'utiliser une fonction dans une structure pour par exemple effacer un fichier: struct FICHIER {     char *path;     sta wchar [ par xterminhate ] j'ai un objet de type ( const wchar_t * ). Je voudrais passer cet objet en paramètre d'une fonction f( const char * ). Existe-t-il une fonction de co c++ et delete [ par anne-lise ] Bonjour !voila, j'ai un probleme lorsque je veux faire des delete sur des tableauz.J'ai une fonction du type :float* function(param, int n){   float* Fonction pour remplacer [ par Hyldrios ] Bonjour, je debute le c++ et je voudrais savoir si il existe une fonction pour remplacer un charactère par un autre (en l'occurence un espace par _ ). Fonction En Paramètre [ par Joky ] Hep Hello les gens :) J'ai une question qui me tarrode l'esprit voyez vous Exemple explicite LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); Fonction dans DLL [ par guitoulefoux ] Bonjour,J'ai une petite question sur les DLL.J'ai fais une DLL avec un fonction "StartProcess".J'arrive bien à appeler la fonction "StartProcess" d'un convertir pointeur int* en reference int& ??? je fais quoi ? [ par equimose ] j'ai une fonction qui prend comme parametre une CMyLigne & ABet j'ai besoin d'envoyer a cette fonction un pointeur sur une CMyLigne * pLigne !c'est po equivalence inp createfile... [ par vladisback ] bonjour je suis sous xp, je ne sais pas concrétement se que font les inp et outp mias j'aurais voulu recompiler un prog qui en contient sous xp. quel


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales