C++ 如何正确地为一个";动态分配内存;数组";弦乐
所以,我只是在搞乱一些代码,询问用户他们希望雇佣多少人员。输入他们想要的号码后,我开始三个指针。我关注的指针是字符串指针“employee_Names”。初始化之后,我尝试根据用户对指针“employee_Names”的输入动态分配所需的适当内存量 我认为我的语法对这一部分很好,但当我试图在分配的内存中实际存储信息时,问题就来了。如代码中所示,我尝试直接将员工_名称[0]设置为一个名称,但这会导致错误C++ 如何正确地为一个";动态分配内存;数组";弦乐,c++,string,malloc,dynamic-memory-allocation,C++,String,Malloc,Dynamic Memory Allocation,所以,我只是在搞乱一些代码,询问用户他们希望雇佣多少人员。输入他们想要的号码后,我开始三个指针。我关注的指针是字符串指针“employee_Names”。初始化之后,我尝试根据用户对指针“employee_Names”的输入动态分配所需的适当内存量 我认为我的语法对这一部分很好,但当我试图在分配的内存中实际存储信息时,问题就来了。如代码中所示,我尝试直接将员工_名称[0]设置为一个名称,但这会导致错误 personnel = requested_service() - 1; string *
personnel = requested_service() - 1;
string *employee_Names;
int *employee_Ages;
char *employee_Company;
employee_Names = (string*)malloc(personnel);
employee_Names[0] = "Bahn";
printf("Employee number 1 is: %s", employee_Names[0]);
我真的很想得到一些启示。如果需要在某个领域更具体一些,或者需要查看更多代码,请告诉我。问题是您使用了
malloc()
。您为人员分配内存的字节数,而不是字符串数。你根本不需要在内存中构造任何字符串对象
<>不要在C++中使用<代码> MalCube()/<代码>,如果你能避免它的话。改用new
和new[]
,例如:
#包括
#包括
人员=。。。;
std::string*员工姓名;
...
员工姓名=新标准::字符串[人员];
员工姓名[0]=“Bahn”;
...
std::printf(“员工编号1为:%s”,员工姓名[0].c_str());
...
删除[]名员工的姓名;
也就是说,您确实应该使用std::vector
,而不是直接使用new[]
。另外,使用std::cout
代替printf()
:
#包括
#包括
#包括
人员=。。。;
std::矢量员工姓名(人员);
...
员工姓名[0]=“Bahn”;
...
STD::C++中的CUT,“动态字符串数组”拼写为“代码> STD::vector < /代码>。尽管在您的示例中,您可能希望定义一个类Employee
,然后使用std::vector
std::string
是一个需要正确构造的复杂对象malloc
提供内存,但不调用构造函数。如果不调用string
s构造函数中的任何一个,就不会真正拥有string
。你有一块假装成字符串的内存块,它几乎就是一颗定时炸弹。用这个未初始化的内存执行任何string
ish操作都会导致程序中断,而程序崩溃是最好的情况。