#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
using namespace std;
union type{
int a;
char b;
int *p;
char *s;
int arr[10];
};
int fn(union type *exp){
exp->p = exp->p+1;
cout << *(exp->p);
cout << "\n";
return 0;
}
int main(){
union type *str;
str->a = 10;
str->b = 'n';
str->p = &(str->a);
cout << (str->p);
cout << "\n";
fn(str);
cout << str->p;
cout << "\n";
return 0;
}
이 코드는 세그먼트 오류를 발생시킵니다. 그것은 malloc을 사용하여 명시 적으로 union에 메모리를 할당해야하기 때문입니까? 나는 코딩에 익숙하지 않고 C++를 배우려고 노력하고 있습니다.코드 세그먼트 화 오류
'malloc'을 사용하여 C++를 배우려고하면 이상한, 무의미한 노동 조합이 너를 멀리하지 않을 것이다. FAQ에 좋은 책 목록이 있습니다. – chris
str이 형식이 아닌 형식에 대한 포인터가되어야하는 이유가 있습니까? *를 * 삭제하고 모든 ->를.으로 변경하면 모든 것이 작동합니다. (음, fn 프로토 타입에서 *를 & 대신에 &로 바꾸고 싶을 수도 있습니다. – abarnert
또한 malloc str (또는 비 포인터로 대체)을 사용하더라도 fn (str)은 다음과 같이됩니다. 실패합니다 (그러나 운이 좋다면 segfault는 아닐 것입니다). str-> p를 str 자체에 대한 포인터로 설정 한 다음 증분하여 str보다 중간 인 sizeof (int) 바이트를 가리키게됩니다. str의 중간 또는 str 뒤에 오는 객체 또는 초기화되지 않은 메모리, 어느 것도 int로 인쇄하고 싶지 않은 것입니다. – abarnert