위의 프로그램을 gcc 컴파일러 (www.codepad.org)에서 실행하면 으로 출력됩니다. 허용되지 않는 시스템 호출 : SYS_socketcall 이 오류/출력이 왜 발생하는지 명확히 알 수 있습니까?포인터 할당 문제
int main() {
int i=8;
int *p=&i;
printf("\n%d",*p);
*++p=2;
printf("\n%d",i);
printf("\n%d",*p);
printf("\n%d",*(&i+1));
return 0;
}
제가 관찰 한 바에는 * ++ p = 2를 실행 한 후에 액세스 할 수 없게되는 이유는 무엇입니까?
올바른 설명. 감사합니다. – hari
다음 코드는 정상적으로 실행됩니다 : INT의 main() { INT의 I = 8; INT의 *를 P = 난; 의 printf ("\ n을 % d에"* P) * ++ p = 2; //의 printf ("\ n 개의 % d ", i); printf ("\ n % d ", * p); // printf ("\ n % d", * (&i+1)); return 0; } 이것은 * ++ p = 2로 인해 문제가 있다는 것을 의미합니다. 할당되지 않은 메모리에 액세스 했음에도 불구하고 문제가 없습니다. * ++ p = 2 p는 값 2 인 위치를 가리 킵니다. 그러나 혼란은 i.SO의 가치를 변경시키지 못하는 이유는 무엇입니까? – sudhansu
i는 배열이 아니지만 * ++ p = 2.i에 4 바이트 만 할당 된 후 값이 변경됩니다 .4 바이트 만 후 위치를 가리 킵니다. 왜 내가 액세스 할 수 없습니까? – sudhansu