ERROR excepcion: char* = char* + n

Iniciado por x64core, 20 Enero 2012, 09:36 AM

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

x64core

buenas tengo problema con este pinche codigo, lo e llegado a hacer hasta en asm y en c no puedo  :¬¬
es que esto de tipos no me gusta nada  :¬¬

int main()
{
char* i = new char[10] = "testing";

if(*i > 97) // si es mayor que 'a'
{
*i = *i +  3;
}
return 0;
}


intento sumarle un valor de 3 si el char es mayor que 97('a')
pero a la hora de asignar el valor resultante me sale ese error de excepcion ya intente hacer unos cuantos casting pero na... :/ como sea hace? :)
gracias!

Akai

#1
Tu inicialización es incorrecta.

No puedes asignar cadenas de esta forma:

Código (cpp) [Seleccionar]
char* i = new char[10] = "testing";

En cambio, vas a tener que usar una función como strcpy, por ejemplo:

Código (cpp) [Seleccionar]
char* i = new char[10];
strcpy(i,"testing");


más info en:
http://cplusplus.com/reference/clibrary/cstring/strcpy/

x64core

Bien, gracias, dejo el codigo por si a alguien le sirve:

Código (cpp) [Seleccionar]

void func1(void* d,void* s,int l)
{
__asm
{
push ecx
push edi
push esi
push edx
xor ecx,ecx
xor edx,edx
mov ecx,l
mov edi,d
mov esi,s
lo: mov dl,[esi]
mov [edi],dl
inc esi
inc edi
loop lo
pop edx
pop esi
pop edi
pop ecx
}
}

int main()
{
char* tmp;
char* p = "testing";

tmp = new char[10];
func1(tmp,p,7);

if(*tmp > 97)
{
*tmp += 3;
}
delete[] tmp;
return 0;
}

Akai

Tu código sigue teniendo errores, como mínimo en la función main

Código (cpp) [Seleccionar]
char* p = "testing";


Eso te va a dar, como minimo una violación de segmento debido a que *p no tiene memoria asignada.

No le puedes asignar algo a un puntero si no tiene memoria para recogerlo.

Eternal Idol

#4
Akai estas confundido, ahi p apunta a la cadena literal "testing".

PD. Ese codigo no es portable por usar ensamblador sin necesidad, con memcpy (que esta optimizada para usar rep movs cuando sea eficiente) podes hacer exactamente lo mismo que con func1 y con strcpy podes copiar una cadena aunque cambie el tamaño.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Akai

Cita de: Eternal Idol en 21 Enero 2012, 09:40 AM
Akai estas confundido, ahi p apunta a la cadena literal "testing".

FFFFUUU, cierto

Nota mental 256: No postees tal cual te levantas de dormir

x64core

@Eternal Idol:
:o
enserio no es portable!!!? :|
osea que solo se ejecuta en un 386 o en un 486!
yo hice la funcion porque creo que es mas rapido que el propio memcpy o strcpy

Akai

Consejo, RHL:

No pierdas tiempo reinventando la rueda. memcpy y strcpy llevan mucho tiempo y creeme que optimizaciones se les habrán dedicado.

x64core

:S ...
donde puedo ver el codigo de esas funciones?
e buscado en el archivo string.h y no encuentro el cuerpo de la funcion :P

Akai

#9
Porque eso es únicamente la cabecera. La implementación  de las funciones deberías poder encontrarla en los archivos de código fuente del compilador que utilices.