Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Seyro97

#81
El compilador es el que viene con el ID de VisualStudio 2013.

Me sigue dando el error con la solución propuesta  :-(

Gracias por comentar
#82
Hola. Muy buenas a tod@s. El problema que tengo es algo extraño. Primero enseño el código:

Código (cpp) [Seleccionar]
void String::replaceData(const char *data) {
_num_characters = 0;

while(data[_num_characters] != (char)NULL)
_num_characters += 1;

realloc(_value, _num_characters + 1);
_value[_num_characters] = (char)0;

while(true) {
--_num_characters;

_value[_num_characters] = data[_num_characters];

if(_num_characters == NULL)
break;
}
}


Main

Código (cpp) [Seleccionar]
#include <iostream>

#include "string.h"

int main(int argc, char *argv[]) {
String cadena = "Hola";

cadena.replaceData("Hola, soy un programador");

std::cin.get();
return 0;
}


El problema está en la línea 4, donde el while. Cuando la cadena que le paso por parámetros tiene mas de 16 caracteres, y en el programa presiono enter (el cin.get deja continuar el programa), me sale el siguiente error:
'Debug Assertion Failed, file f:\dd\vctools\crt\crtw32\misc\dbgheap.c, line 1322, expression: _CrtlsValidHeapPointer(pUserData)'

Sé que el error se produce en el while ya que quitandolo, y sustituyendo la variable _num_characters por 17 no me da ese error.

Espero que me puedan ayudar :P Gracias
#84
Vale. Gracias :P

Solo para aclarar. Entonces, no tengo que hacer nada de gestión de memoria al cerrar el programa?
#85
Lo preguntaba para enfocarme en la asignación dinámica con malloc (y en c++ con new). A lo mejor por ser dinámica, por alguna razón, necesitan ser eliminadas. No se muy bien como va :P

La duda viene originada de que a medida de que va pasando el tiempo, parece que mi memoria RAM se va llenando (ej.: empiezo al 19% y ya voy por el 21%). Esto pasa siempre.
#86
Hola a todos. Hoy tengo una duda/curiosidad que quería resolver.

La duda es la siguiente: ¿Las variables (arrays, clases...) de desasignan al cerrar el programa? También las variables previamente asignadas con malloc se desasignan al cerrar el programa, o necesitas eliminarlas tu mismo?

Gracias
#87
... Por eso algunas veces me siento tonto. Claro xD Gracias!

Para el que le interese, aquí le dejo el código con el error solucionado :D

Código (cpp) [Seleccionar]
String::String(const char *init_value) {
unsigned int num_characters = 0;

while(init_value[num_characters] != (char)NULL)
num_characters += 1;

_num_characters = num_characters;
_value = (char *)malloc(num_characters + 1);
_value[num_characters] = (char)0;

while(true) {
--num_characters;

_value[num_characters] = init_value[num_characters];

if(num_characters == 0)
break;
}
}
#88
Hola. Muy buenas a todos. Hoy traigo una duda de las que uno piensa que el compilador está fallando porque no tiene otra explicación.

Primero voy a introducir: Estoy intentando imitar la clase string a modo de ejercicio. Pues bien, en el constructor está pasado algo solo descriptible a través de la salida (está debajo del código).

Código (cpp) [Seleccionar]
String::String(const char *init_value) {
unsigned int num_characters = 0;

while(init_value[num_characters] != (char)NULL)
num_characters += 1;

_num_characters = num_characters;
_value = (char *)malloc(num_characters + 1);

_value[num_characters] = (char)0;

while(--num_characters >= 0) {
printf("%d ", num_characters);  // _value[num_characters] = init_value[num_characters];
}
}


Pues bien, la salida es la siguiente:
3 2 1 0 -1 -2 -3 -4 //... y así hasta el infinito
(El comentario no está en la salida, solo es para aclarar)

Como ven, aunque num_characters valga menos de 0, el while se sigue repitiendo...

Espero que sea error del compilador, porque si no yo sería muy tonto

#89
Para ayudarte, necesitamos al menos las declaraciones de las funciones usadas en este código para así identificar el error
#90
Con break sería:

Código (cpp) [Seleccionar]
#include <stdio.h>

int main(void) {
int valor = 0;

printf("Introduza un valor entre 0 y 100: ");
scanf_s("%d", &valor);
fflush(stdin);

if(valor > 100) {
printf("Has introducido un número mayor a 100! El programa va a cerrarse");
getchar();
return -1;
}

int contador;
for(contador = 0; contador <= 100; contador++) {
if(valor < contador)
break;
else
printf("A");
}

getchar();
return 0;
}