Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试删除字符时出现运行时错误*_C++_Memory Leaks_Char_Delete Operator - Fatal编程技术网

C++ 尝试删除字符时出现运行时错误*

C++ 尝试删除字符时出现运行时错误*,c++,memory-leaks,char,delete-operator,C++,Memory Leaks,Char,Delete Operator,我有一段代码: cout<<"Enter first name (maximum "<<MAX_LENGTH<<" letters):"; cin>>name; cin.ignore(); name[MAX_LENGTH] = '\0'; fName = new char [strlen(name)]; strcpy(fName, name); delete [] fName; cout如果name声明为char name[MAX_LENGTH]

我有一段代码:

cout<<"Enter first name (maximum "<<MAX_LENGTH<<" letters):";
cin>>name;
cin.ignore();
name[MAX_LENGTH] = '\0';
fName = new char [strlen(name)];
strcpy(fName, name);
delete [] fName;

cout如果
name
声明为
char name[MAX_LENGTH]
,则最大索引可以是
MAX_LENGTH-1
,因为数组具有基于零的索引。使用

超出限制访问内存。使用

name[MAX_LENGTH-1]= '\0';
此外,您的
姓名
应具有
MAX_LENGTH-1
字符

cout<<"Enter first name (maximum "<<MAX_LENGTH-1<<" letters):";
cout
问题是strcpy需要strlen(名称)+1个字符(额外一个字符用于结尾0)。了解C字符串表示法

fName = new char [strlen(name)];
strcpy(fName, name);
delete [] fName;
您分配了一个长度为
strlen(name)
的数组,但随后复制了
strlen(name)+1个
字符。这是因为
strlen()。但是
strcpy
复制空终止符


这意味着对strcpy的调用超出了缓冲区的末尾,之后程序的行为未定义。

use
name[MAX_LENGTH-1]='\0'。我很确定运行时错误发生在这里
strcpy(fName,name)
fName = new char [strlen(name)];
strcpy(fName, name);
delete [] fName;
fName = new char [strlen(name)];
strcpy(fName, name);
delete [] fName;