C++ 内存损坏C++;

C++ 内存损坏C++;,c++,C++,在对这篇文章提出一些批评之后,我决定尝试另一种解决方案来测试我的问题 下面代码的目的是将用户输入保存到数组中,然后在用户键入exit时将其输出。我对C++比较陌生,这意味着我知道这是一个代码问题。 此代码的约束条件是不使用STL或字符串 我附上了下面的代码,它没有给出所需的输出,而是打印出“exit”,打印次数等于数组中存储的项数 #include <iostream> char * textArr[1000]; int lineCount = 0; void saveText(

在对这篇文章提出一些批评之后,我决定尝试另一种解决方案来测试我的问题

下面代码的目的是将用户输入保存到数组中,然后在用户键入
exit
时将其输出。我对C++比较陌生,这意味着我知道这是一个代码问题。 此代码的约束条件是不使用STL或字符串

我附上了下面的代码,它没有给出所需的输出,而是打印出“exit”,打印次数等于数组中存储的项数

#include <iostream>

char * textArr[1000];
int lineCount = 0;

void saveText(char * text) {
    textArr[lineCount] = new char(1000);
    strcpy(textArr[lineCount], text);
}


int main()
{
    char * line = new char(1000);

    while (lineCount < 1000) {
        std::cin.getline(line , 1000);

        if (strcmp(line, "exit") == 0) {
            break;
        }

        saveText(line);
        lineCount++;
    }

    for (int i = 0; i < lineCount; i++) {
        std::cout << textArr[i] << std::endl;
    }

    delete(textArr);
    delete(line);

    return 0;
}
#包括
字符*textArr[1000];
int lineCount=0;
无效保存文本(字符*文本){
textArr[lineCount]=新字符(1000);
strcpy(textArr[lineCount],text);
}
int main()
{
字符*行=新字符(1000);
而(行数<1000){
标准:cin.getline(第1000行);
如果(strcmp(行,“退出”)==0){
打破
}
保存文本(行);
lineCount++;
}
对于(int i=0;istd::无法创建。另外,为什么您认为映射键已损坏?我承认我没有使用VS debugger;它是否真的具有告诉内存中哪些对象已损坏的功能?使用调试符号编译您的程序并使用valgrind运行。
valgrind./yourprogram
。这应该能够找到您从何处获得memory已损坏。我认为当您读取
指令时,它已损坏。@Justin将临时值传递给具有
常量和
参数的函数是完全正确的。您使用的是一个缓冲区作为行,因此将该缓冲区的指针存储在数组的每个位置(在读循环中重写同一缓冲区的内容,这样你就得到了一组元素,这些元素都指向同一个包含你最后一行的单个缓冲区)。你需要为循环中的每一行分配内存(并且你应该考虑在程序结束时释放内存),你是否意味着<代码>新char(1000)< /代码>?