2017-03-01 19 views
0

私はスワップ(実際のプログラムで実装する前にそれをテストするために袖口を使用しています)をポインタで作成していますが、なぜこのセグメンテーションフォルトが発生するのかは完全にわかりません私はそれを実行します。何か案は?スワップ機能のセグメンテーションフォールトの取得

#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 
using namespace std; 

char * initializeWord(int length); 
void swap(char *a, char *b); 
//void scrambleWord(char *word, int size); 

int main() 
{ 
    int length; 
    char *word, *x, *y; 
    cout << endl << "Welcome to Word Scrambler!" << endl << endl; 
    cout << "How many letters will your word have?" << endl << endl; 
    cin >> length; 
    getchar(); 
    cout << endl << "Please input a word that contains " << length << " many characters." << endl << endl; 
    word = initializeWord(length); 
    cout << endl; 
    cout << "The word you entered was: " << word << endl << endl; 
    swap(x,y); 

    delete[] word; 
    return 0; 
} 

char * initializeWord(int length) 
{ 
    //initialization of char array 
    char *cArray = new char[length]; 
    //user's word 
    cin >> cArray; 
    getchar(); 

    return cArray; 
    delete[] cArray; 
} 

void swap(char *a, char *b) 
{ 
    cout << "First values:" << endl << a << endl << b << endl; 
    char *temp = a; 
    a = b; 
    b = temp; 
    cout << "Second values:" << endl << a << endl << b << endl; 
} 
+0

'x'と' y'は何も設定しません... – GigaRohan

+3

C++でCコードを書かないでください。参照と 'std :: vector'を使用してください。 – Alexander

+1

'return'の後に' delete'することはできません。 – pinkfloydx33

答えて

2

cin >> cArray; この行は、ユーザーの入力を配列のアドレスとして設定しています。

あなたはおそらくしたい:

char* initializeWord(int length) 
{ 
    char* cArray = new char[length]; 

    for(int i = 0; i < length; ++i) 
    { 
     cin >> cArray[i] 
    } 
    ... 
} 

それとも文字列を使用します。

+0

これは私が今やっておきたいことです。それが問題を引き起こしたら、後でそれを変更します。しかし、私が今やろうとしているのは、スワップ機能が正しく機能するかどうかをテストすることです(テストしません)。私は* xと* yをchars 'x'と 'y'に設定しようとしましたが、これはどちらもうまくいきませんでした... – Parker

+0

@Parkerあなたは、あなたのユーザが有効なアドレスを入力すると期待していると教えてください。代わりに言葉を入力してほしいと思います。配列自体のアドレスではなく、配列のアドレスを保持する変数に書き込んでいます。 – JGroven

+0

ええ、あなたは正しいと思いますが、私はそれをしたくありませんが、私はそれを実行しているときに働いていました。目標は入力された単語を取り、その単語の各文字を配列内に持つことです。 – Parker