› Foros › PC › Software libre
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <string.h>
char* BufferMalloc(const char* txt) {
char* cadena = (char*)malloc(strlen(txt));
strcpy(cadena, txt);
return cadena;
}
char* BufferNew(const char* txt) {
char* cadena = new char[strlen(txt)];
strcpy(cadena, txt);
return cadena;
}
char* BufferVec(const char* txt) {
std::vector<char*> cadena;
cadena.push_back(new char[strlen(txt)]);
strcpy(cadena[0], txt);
return cadena[0];
}
int main(int argc, char* argv[]) {
std::cout << BufferMalloc("Hola") << std::endl;
std::cout << BufferNew("Hola") << std::endl;
std::cout << BufferVec("Hola") << std::endl;
return 0;
}
Kaitos escribió:Estoy haciendo un juego en C++ con SDL y me acabo de topar con un posible memory leak.
#include <iostream>
#include <cstring>
void ToBuff(const char *txt, char **buffer ) {
(*buffer) = new char[strlen(txt)];
strcpy((*buffer), txt);
}
int main(int argc, char* argv[]) {
char *buff;
ToBuff("Hola", &buff);
std::cout << buff << std::endl;
delete[] buff;
return 0;
}
Ferdy escribió:1) Si usas C++, ¿por qué no usas std::string?
Ferdy escribió:2) Las cadenas delimitadas por " son de tipo 'const char *', no deberías hacer ese cast a char*. Es más, en C++ no deberías usar casts 'tipo C'.
Ferdy escribió:3) sizeof(txt) == sizeof(char*) == 4 en x86. Te funciona de chiripa. Eso está MAL. Realmente quieres usar strlen(txt) y no sizeof.
Ferdy escribió:4) Me pregunto cuál es el objetivo de la función ToBuff.
Kaitos escribió:Ferdy escribió:4) Me pregunto cuál es el objetivo de la función ToBuff.
Su función es pasarle un paquete de archivos y extraer el archivo solicitado (que devuelve en el buffer) para luego cargar el archivo de ese buffer (que es de audio/imagen) con SDL.
Kaitos escribió:Muchas gracias por los apuntes, Ferdy. A ver si me voy quitando ya las manías que acarreo de C...