내가 갖는 문제를 사용하여 해방 후 포인터를 사용 : 나는 세그먼트 오류를 받고 있어요다음 코드 유형 무료()
int* myPointer1 = malloc(50 * sizeof(int));
int* myPointer2 = malloc(50 * sizeof(int));
free(myPointer1);
myPointer1 = myPointer2;
myPointer1[0] = 3;
. 뭐가 문제 야?
내가 갖는 문제를 사용하여 해방 후 포인터를 사용 : 나는 세그먼트 오류를 받고 있어요다음 코드 유형 무료()
int* myPointer1 = malloc(50 * sizeof(int));
int* myPointer2 = malloc(50 * sizeof(int));
free(myPointer1);
myPointer1 = myPointer2;
myPointer1[0] = 3;
. 뭐가 문제 야?
이 코드에는 문제가 없습니다. 귀하가 올린 스 니펫은 정확하고 격리되어 잘 작동합니다.
코드 스 니펫이 정확하기 때문에 정확합니다. 작동하기 때문에 올바르지 않습니다. UB 와도 잘 작동하여 예상치 못한 상황에서 잘 날아갈 수 있습니다. –
"코드 스 니펫이 정확하기 때문에 정확합니다."-> http://xkcd.com/703/ =) – jadarnel27
제대로 작동했기 때문에 제대로 작동하지 않는다고 말하지 않았습니다. 그것은 명백한 정의되지 않은 동작을 포함하고 있습니다.), * 그리고 * 작동합니다 (예를 들어, 나는 세그먼트 화 된 오류를보고하지 않습니다). – duskwuff
당신의 코드는 아무 문제가 없지만 malloc() 함수의 반환 값을 테스트하는 습관을 가지고 있습니다. NULL이면 프로그램에 문제가 생깁니다. 우리의 경우 메모리 할당은 다음과 같습니다. malloc() 함수가 실패했습니다.
malloc 작업이 성공적으로 수행되었는지 확인 했습니까? myPointer1을 NULL에 할당하지 않을 수 있습니다. – djhaskin987
어디에서 segfault합니까? 'free (myPointer1)'또는'myPointer1 [0] = 3'에서? – Seth
'malloc'이 성공하면 segfault가 없어야합니다. 여러분이하고있는 일은'myPointer1'의 원래 메모리 위치에서 메모리를 비운 다음'myPointer1'을'myPointer2'의 위치에 재 할당하는 것입니다. 그러나 마지막 비트의 메모리를 해제하려는 경우 동일한 주소를 가리 키기 때문에 포인터 중 하나 (예 :'myPointer1' 또는'myPointer2') 만 해제하면됩니다. – RageD