2014-07-05 4 views
0

어디에 문제가 있습니까? 응용 프로그램이 충돌 ...이 응용 프로그램을 실행할 때 C- 크래시

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 

void test(char* x) { 
    (*x)++; 
} 

int main() { 
    char* x = "xD"; 
    test(x); 
    puts(x); 
    getch(); 
    return 0; 
} 
+0

자세한 내용을 입력하십시오. 어떻게 추락합니까? 이 코드를 실행하면 어떻게됩니까? 너는 정확히 무엇을하고 싶니? – kjaquier

+1

문자열 리터럴을 변경했습니다. – BLUEPIXY

+0

C에서 문자열 리터럴 검색 ... – mafso

답변

2

char* x = "xD";을 사용하면 해당 종류의 데이터에 대한 포인터를 선언하기 때문에 읽기 전용 메모리 주소에 저장된 문자열 리터럴을 수정하려고합니다. 대신 char x [] = "xD";을 사용하십시오. 이는 포인터가 아니며 스택에 저장되어 있기 때문에 수정할 수있는 배열입니다. 또는 포인터를 사용하려면 메모리를 할당해야합니다.

1

가 줄을 읽기 전용 메모리에 (*x)++;x 때문에 포인트 충돌로 인해 정의 char* x = "xD";에 실행하는 경우.

char x[] = "xD";으로 변경하십시오. 그래서 x은 배열이고 값은 변경 될 수 있습니다.

관련 문제