Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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++_String_Malloc_Dynamic Memory Allocation - Fatal编程技术网

C++ 如何正确地为一个";动态分配内存;数组";弦乐

C++ 如何正确地为一个";动态分配内存;数组";弦乐,c++,string,malloc,dynamic-memory-allocation,C++,String,Malloc,Dynamic Memory Allocation,所以,我只是在搞乱一些代码,询问用户他们希望雇佣多少人员。输入他们想要的号码后,我开始三个指针。我关注的指针是字符串指针“employee_Names”。初始化之后,我尝试根据用户对指针“employee_Names”的输入动态分配所需的适当内存量 我认为我的语法对这一部分很好,但当我试图在分配的内存中实际存储信息时,问题就来了。如代码中所示,我尝试直接将员工_名称[0]设置为一个名称,但这会导致错误 personnel = requested_service() - 1; string *

所以,我只是在搞乱一些代码,询问用户他们希望雇佣多少人员。输入他们想要的号码后,我开始三个指针。我关注的指针是字符串指针“employee_Names”。初始化之后,我尝试根据用户对指针“employee_Names”的输入动态分配所需的适当内存量

我认为我的语法对这一部分很好,但当我试图在分配的内存中实际存储信息时,问题就来了。如代码中所示,我尝试直接将员工_名称[0]设置为一个名称,但这会导致错误

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操作都会导致程序中断,而程序崩溃是最好的情况。