获取交换功能的分段错误 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;
【问题讨论】:
你永远不会将x
和y
设置为任何东西......
不要用 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的主要内容,如果未能解决你的问题,请参考以下文章