2014-11-02 6 views
-1

일부 코드를 사용하여 작동하고 있지만 작동하지 않으려 고했지만 뭔가를 놓친 것 같습니다. 아무도 말해 줄 수 없으므로 나는 무엇을 놓치거나 잘못 했는가? 당신은 S->pFileBuffer에 리터럴 charater 문자열을 할당ConsoleApplication2.exe에서 첫 번째 예외가 발생했습니다. 0xC0000005 : 액세스 위반 작성, C++

#include <iostream> 
using namespace std; 

/* 
struct StubData{ 
char * pFileBuffer; 
long long FileSize; 
char * pKey; 
long KeySize; 
};*/ 


class StubData{ 
public: 
    char *pFileBuffer; 
    long long FileSize; 
    char *pKey; 
    long KeySize; 
    StubData(){} 
}; 





void Decrypt(StubData * sData){ 
    int i=0,j=0; 


for(i;i<sData->FileSize;i++){ 
    *(sData->pFileBuffer+i) ^=*(sData->pKey+j); 
    j++; 
    if (j>=sData->KeySize)j=0; 
} 

} 


void Encrypt(StubData * sData){ 
    int i,j; 

    sData->pKey="mysecretpassword"; 
    sData->KeySize=strlen(sData->pKey); 

    j=0; 

    printf("[*]Encoding\n"); 
    for(i=0;i<sData->FileSize;i++) 
    { 
     *(sData->pFileBuffer+i) ^=*(sData->pKey+j); 
     j++; 
     if (j>=sData->KeySize)j=0; 
    } 
} 


void main(){ 
    //StubData S; 
    StubData *S = (StubData *)malloc(sizeof(StubData)); 
    new (S) StubData; 

    S->pFileBuffer="MARKO"; 
    S->FileSize=strlen(S->pFileBuffer); 

    Encrypt(S); 
    cout<<"\nenc\n"<<S->pFileBuffer; 

    Decrypt(S); 
    cout<<"\ndec\n"<<S->pFileBuffer; 
} 

답변

0

내가 비주얼 스튜디오 2012 그게 함께 할 수있는 뭔가가있는 경우에 컴파일하고있어 ... : 여기 *(sData->pFileBuffer+i) ^=*(sData->pKey+j);

에서 프로그램 나누기는 전체 코드입니다

S->pFileBuffer="MARKO"; 

이 문자열 리터럴

은 (종종 .rodata로 컴파일) 불변입니다. 가변 문자열을 원하면 어딘가에 할당해야합니다.

당신은

char str[] = "MARKO"; //be careful, if this goes out of scope before S, then S has a dangling pointer 
S->pFileBuffer=str; 

같은 뭔가를 할 수 이것은 ++ 매우 C되지 않습니다 -있다. 하지만 나머지 코드는 C++처럼 보이지 않습니다.

+0

문제점이 무엇이며 제안 사항이 어디에 있습니까? 에 대해 설명해 주셔서 감사합니다.하지만 여전히 같은 줄에서 깨져 있습니다 ... – perunswrath

+0

@perunswrath는 (는) 재현 할 수 없습니다 : http://ideone.com/75to16 컴파일 된 코드를 게시하십시오. 그래도 문제가 생기면 – PeterT

+0

대단히 감사합니다 ... 지금 작동합니다 :) – perunswrath