Fallo en Code::Blocks? Sistema operativo?

Iniciado por Cabezon_Encebollao, 14 Julio 2018, 09:41 AM

0 Miembros y 1 Visitante están viendo este tema.

Cabezon_Encebollao

He encontrado un par de fallos (mios, mecagonlamarsalada)

1. La primera funcion no logre hacerla funcionar de nuevo, asi que la quite y lo hice desde el propio main... con el codigo que te mando ahora funciona perfectamente... tanto con el delete[] como con el delete!!!

2. El otro problema es cuando inicializo el puntero tal que asi: p="Puntero cabron". El cout lo muestra... pero el delete lo revienta. Con el codigo que te mando ahora, me funciona (igual actualizar el lxle sirvio, yo ya no se na jaja)
Código (cpp) [Seleccionar]

#include<iostream>
using namespace std;

int contadorStrings(string s)
{
    int cuenta=0;
    for(int a=0;s[a]!='\0';a++)cuenta++;
    return cuenta;
};

int main()
{
    string texto="Pruebas de funcionamiento";
    cout<<texto<<" : "<<contadorStrings(texto)<<endl;

    char *d=NULL;
    d=new char[contadorStrings(texto)];

    // Si en lugar de la secuencia for inferior pongo p="texto"; el delete rompe
    for(int a=0;texto[a]!='\0';a++)
    {
        d[a]=texto[a];
        cout<<texto[a]<<" ";
    };
    d[contadorStrings(texto)]='\0';

    cout<<"\nEl contenido del puntero es: "<<d<<endl;

    delete[] d;
    return 0;

};


Cabezon_Encebollao

Genial!! ahora ya lo entiendo, Calgary! no contaba con que cambiaba el tipo de asignacion de memoria! Ahora ya entiendo porque pasaba. Mil millones de gracias.. con esto de las memorias estaba echo un lio, ahora ya lo entiendo! tomate unas cuantas cervezas a mi salud, que las has ganado aguantandome :D ( y yo echando la culpa al pc.. sere prepotente :P)

CalgaryCorpus

Te falta pedir memoria para el 0 final.
No es suficiente contar los caracteres que quieres copiar desde el string original, porque en verdad requieres 1 mas. Hazme caso y cuando pidas memoria pide 1 mas que los caracteres visibles. La linea 25 de tu programa esta escribiendo en un espacio de memoria que no es tuyo. Hazlo tuyo pidiendo memoria para 1 mas en la linea 17.


Aqui mi perfil en LinkedIn, invitame un cafe aqui

Cabezon_Encebollao

Lo haré tienes toda la razon, la que se puede liar por un triste espacio de memoria!
Y no te imaginas lo mucho que me has ayudado con el tema de la asignacion de memoria. No me entraba en la cabeza de que estaba reasignandolo y liandola parda. Ya me siento valiente hasta la proxima liada!
Mil gracias de nuevo, a veces es desesperante tener fallos y no tener ni idea de que pasa y de donde vienen

MAFUS

Te paso un documento que te irá muy bien para aprender a manejar la memoria. Es para C, pero cómo C++ está basado y es muy parecido en ese aspecto te funcionará igual para saber cómo maneja éste último la memoria.

Cabezon_Encebollao

Muchas gracias, Mafus! Reconozco que me hago un lio bastante gordo con ellas!  tengo muy buenas ideas en la cabeza, y cuando me pongo a ello, ya ves... la lio parda :D

MAFUS