获取交换功能的分段错误 11

Posted

技术标签:

【中文标题】获取交换功能的分段错误 11【英文标题】:Getting a segmentation fault 11 for swap function 【发布时间】:2017-03-01 01:17:34 【问题描述】:

我正在创建一个带有指针的交换(在我的实际程序中实现它之前使用 couts 对其进行测试)函数,我不完全确定为什么我在运行它时会遇到这个分段错误。有什么想法吗?

#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;

【问题讨论】:

你永远不会将xy 设置为任何东西...... 不要用 C++ 编写 C 代码。使用参考和std::vector 在你return之后你不能delete;回来后什么都做不了 char *cArray = new char[length]; 这个语句在 C++ 中是非法的,你不能用非常量变量定义数组的大小 @OnurA.,动态分配数组的大小可以在运行时决定。您正在考虑自动数组,但事实并非如此。请看this 【参考方案1】:

cin >> cArray; 此行将用户输入设置为数组的地址。

你可能想要:

char* initializeWord(int length)

   char* cArray = new char[length];

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

或者只使用字符串。

【讨论】:

这是我现在想要做的,如果以后出现问题我会改变它。但是,我现在要做的就是测试我的交换功能是否正常工作(它不能正常工作)。我尝试将 *x 和 *y 设置为字符 'x' 和 'y' 但这也不起作用......有点卡住了 @Parker 你的意思是告诉我你希望你的用户输入一个有效的地址?我认为您希望他们输入一个单词。您正在写入保存数组地址的变量,而不是数组本身。 嗯,你说得对,我不想这样做,但是当我运行它时,那部分正在工作。目标是获取输入的单词并将该单词中的每个字符放入数组中。 好的,这也可以。很确定这是我应该首先尝试的。我必须实现另外两个功能(不是在寻找答案),但是如果要稍后使用,我是否过早删除 cArray? 实际上,您根本没有删除 cArray。您将在此之前返回并提前结束函数。

以上是关于获取交换功能的分段错误 11的主要内容,如果未能解决你的问题,请参考以下文章

对向量使用 Push Back 功能时的分段错误

带有 std::promise 的 C++11 分段错误

指针数组的分段错误

分段错误:在 C++ 中弹出向量时出现 11

分段错误:11 - C 函数

获取“分段错误核心转储”