std :: cin>> * aa导致总线错误

时间:2010-04-25 13:14:15

标签: c++ pointers char const-char bus-error

我有一个名为PPString的类:

PPString.h

#ifndef __CPP_PPString
#define __CPP_PPString

#include "PPObject.h"

class PPString : public PPObject {
    char *stringValue[];
public:
    char *pointerToCharString();
    void setCharString(char *charString[]);
    void setCharString(const char charString[]);
};

#endif

PPString.cpp

#include "PPString.h"

char *PPString::pointerToCharString() {
    return *stringValue;
}

void PPString::setCharString(char *charString[]) {
    *stringValue = *charString;
}

void PPString::setCharString(const char charString[]) {
    *stringValue = (char *)charString;
}

我正在尝试使用stringValue设置std::cin

的main.cpp

PPString myString;
myString.setCharString("LOLZ");
std::cout << myString.pointerToCharString() << std::endl;

char *aa[1000];
std::cin >> *aa;
myString.setCharString(aa);
std::cout << myString.pointerToCharString() << std::endl;

第一个使用const char,但第二个使用char,但是我得到了这个输出:

从STDOUT复制并粘贴

LOLZ
im entering a string now...
Bus error

第二行是我输入的内容,然后按下return键。

任何人都可以帮我解决这个问题吗?感谢...

4 个答案:

答案 0 :(得分:3)

带有char *s[]签名的setCharString将取消引用指向char*的指针数组的第一个元素。它尚未分配。如果您将aa的声明更改为char aa[1000];,则可能会运行。

还有一些其他问题(其他人也指出)。对变量stringValue的赋值也是取消引用似乎没有分配的内存。很难说它的用途是什么,但它应该没有[]声明。另外,赋值是存储一个指向堆栈内存的指针,在另一个函数调用之后它可能无效。

答案 1 :(得分:1)

当你说:

char *aa[1000];
std::cin >> *aa;

* aa没有分配内存。同样的问题在这里:

char *stringValue[];

名称__CPP_PPString在C ++中保留,所有名称都包含双下划线或以下划线和大写字母开头。您不能在自己的代码中创建它们,

答案 2 :(得分:1)

char *aa[1000];不是您认为的那样。这是一个1000 char *的数组。

请改用std::string。这样,您就不必担心有人输入超过1000个字符并利用您的程序。

E.g。

std::string input;
std::cin >> input;

答案 3 :(得分:0)

您使用的是什么编译器?尝试使用不同的编译器或为你正在使用的编译器启用所有警告,编译器应该告诉你这段代码的错误,你不需要在运行时找到它。

例如,Comeau online会告诉你:

"ComeauTest.c", line 4: error: incomplete type is not allowed
      char *stringValue[];
            ^

"ComeauTest.c", line 23: warning: variable "aa" is used before its value is set
  std::cin >> *aa;