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;i std::无法创建。另外,为什么您认为映射键已损坏?我承认我没有使用VS debugger;它是否真的具有告诉内存中哪些对象已损坏的功能?使用调试符号编译您的程序并使用valgrind运行。valgrind./yourprogram
。这应该能够找到您从何处获得memory已损坏。我认为当您读取指令时,它已损坏。@Justin将临时值传递给具有常量和参数的函数是完全正确的。您使用的是一个缓冲区作为行,因此将该缓冲区的指针存储在数组的每个位置(在读循环中重写同一缓冲区的内容,这样你就得到了一组元素,这些元素都指向同一个包含你最后一行的单个缓冲区)。你需要为循环中的每一行分配内存(并且你应该考虑在程序结束时释放内存),你是否意味着<代码>新char(1000)< /代码>?