[英]C++ Program doesn't terminate because of memcpy
我目前正在测试memcpy函数。 我检查了文档,当我不动态分配内存时一切都适用。 但是当我这样做时,该程序只是不会终止。 就像它进入无限循环。
这是代码,我无法理解为什么会发生,因为一切似乎都很好。
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
struct tStudent{
int indexNo;
char nameSurname[30];
int year;
};
int main(){
tStudent *student=new tStudent;;
student->indexNo=30500;
strcpy(student->nameSurname,"Ralph Martinson");
student->year=2016;
tStudent *newStudent=new tStudent;
memcpy(&newStudent, &student,sizeof(tStudent));
cout<<"PRINT:\n";
cout<<newStudent->indexNo<<endl;
cout<<newStudent->nameSurname<<endl;
cout<<newStudent->year<<endl;
return 0;
}
调用memcpy
,需要向其传递两个指针以及要复制的对象的大小。 指针应该是指向要复制的对象和要复制到的对象的指针。 在
memcpy(&newStudent, &student,sizeof(tStudent));
你不要那样做。 取而代之的是给它提供指向对象的指针。 由于sizeof(tStudent)
大于指针的大小,因此您将开始复制到您不拥有的内存中(因为您正在复制指针的值,而不是它们指向的指针),这是未定义的行为,并且可以/会导致程序做奇怪的事情。
在此处调用memcpy
的正确方法是使用
memcpy(newStudent, student,sizeof(tStudent));
就是说,根本没有理由使用指针。 您的整个代码可以简化为
int main(){
tStudent student; // don't use a pointer. Instead have a value object
student.indexNo=30500;
strcpy(student.nameSurname,"Ralph Martinson");
student.year=2016;
tStudent newStudent = student; // copy initialize newStudent. You get this for free from the compiler
cout<<"PRINT:\n";
cout<<newStudent->indexNo<<endl;
cout<<newStudent->nameSurname<<endl;
cout<<newStudent->year<<endl;
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.