0
#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を使用して明示的にユニオンにメモリを割り当てる必要があるためですか?私はコーディングとc++の学習に不慣れです。

4

2 に答える 2

3

このコードは私にセグメンテーション違反を与えています。これは、mallocを使用して明示的にユニオンにメモリを割り当てる必要があるためですか?

右。strポインタが有効なメモリ位置を指していません。初期化されていません。したがって、書く前に何かstr->aに設定する必要があります。str

于 2012-06-26T04:18:05.973 に答える
1

ユニオンへのポインタを宣言していますが、ポインタが有効なメモリを指していません。これは、malloc/newのいずれかである必要があります。それが指しているのは未定義です(ガベージポインタ)。

于 2012-06-26T04:18:01.917 に答える