/*요즘 군대에서 www.codepad.org로 코딩을 하는데; 어디서 프로그램이 터지는지 알고 싶습니다..
메인함수에서 printf함수를 호출해도 문자열도 출력도 안되고 ㅠㅠ.. 한번만 디버깅즘 ㅎㅐ주시면 안되겠습니까?
저는 군인입니다...*/
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define NULLSPACE 1
#define CHARPARSINT(x) x - 48
#define INTPARSCHAR(x) x + 48
/*
#define LEFT 0
#define RIGHT 1
#define EQUAL 2
*/
enum { LEFT = 0, RIGHT, EQUAL };
int compareoflen(char*,char*);
int howlongsize(char*);
char* makespace(char*,char*);
char* lastpointer(char*);
char* sum(char*,char*);
char* more_big_l(char*,char*);
char* same_size(char*,char*);
int main()
{
printf(\"%s\",sum(\"11\",\"11\"));
return 0;
}
char* sum(char* l,char* r)
{
int morelen = compareoflen(l,r);
if ( morelen == RIGHT ) {
return more_big_l(r,l);
} else if ( morelen == LEFT ) return more_big_l(l,r);
return same_size(l,r);
}
char* same_size(char* l,char* r)
{
char* total = makespace(l,r);
char* ptotal = lastpointer(total);
int len = howlongsize(ptotal);
int i = 0;
int result = 0;
l = lastpointer(l);
r = lastpointer(r);
ptotal[--len] = \'\\0\';
for ( i = len - 1 ; i <= 0 ; i-- ) {
result = CHARPARSINT(*l) + CHARPARSINT(*r);
if ( result >= 10 ){
ptotal[i - 1] = INTPARSCHAR(1);
//INTPARSCHAR(CHARPARSINT(ptotal[len - 1]) + result);
ptotal[i] = INTPARSCHAR(result-10);
} else {
ptotal[i] = INTPARSCHAR(result);
}
}
return total;
}
char* more_big_l(char* l,char* r)
{
char* total = makespace(l,r);
char* ptotal = lastpointer(total);
r = lastpointer(r);
l = lastpointer(l);
/*
be working...
*/
return total;
}
char* makespace(char* l,char* r)
{
int i;
char* n = NULL;
int compare = compareoflen(l,r);
int OVERNUMBER = 0;
int size = 0;
if ( CHARPARSINT(*l) + CHARPARSINT(*r) > 9 ) OVERNUMBER = 1;
switch ( compare ){
case LEFT:
case EQUAL:
n = (char*)malloc(size = strlen(l) + NULLSPACE + OVERNUMBER);
break;
case RIGHT:
n = (char*)malloc(size = strlen(r) + NULLSPACE + OVERNUMBER);
}
memset(n,0,size);
return n;
}
int compareoflen(char* l,char* r)
{
int lLen = strlen(l);
int rLen = strlen(r);
if ( lLen > rLen ) return LEFT;
else if ( lLen < rLen ) return RIGHT;
return EQUAL;
}
char* lastpointer(char* n)
{
char* p = n;
while( p++ ){
if ( *p < \'0\' || *p > \'9\' ) break;
}
return --p;
}
int howlongsize(char* n)
{
int len = 1;
char* p = n;
while( p++ ){
if ( *p < \'0\' || *p > \'9\' ) break;
len++;
}
return len;
}
codepad로 코딩한단말에 연민의정까지 느껴지다 마는 코드구나
에효 군인이란 말에 함 돌려봤다.
직접적인 원인은 : Attempt to write to address 0002ffff
스택 상황을 보면,
0013fec4 00401128 00422021 00422021 0013ff80 testaaa!same_size+0xe0 [d:\\testaaa\\main.cpp @ 58]
0013ff24 00401087 00422020 00422020 7c941440 testaaa!sum+0x68 [d:\\testaaa\\main.cpp @ 37]
0013ff80 004037e9 00000001 00030ec0 00030f28 testaaa!main+0x27 [d:\\testaaa\\main.cpp @ 27]
same_size 이 함수 내부에서 문제가 되고 있잖아? ( 58번 라인 ) 이 때의 지역 변수 값들을 찍어보면
l = 0x00422021 \"1\"
r = 0x00422021 \"1\"
외계달팽이님 감사합니다 ㅠ_ㅠ;