C++ cpp中字符串的动态内存分配

C++ cpp中字符串的动态内存分配,c++,C++,这是我花了5个小时编写的代码,逻辑看起来很好,程序似乎完成了它的工作,唯一困扰我的是字符串的动态内存分配。问题没有指定用户必须输入的字符串的初始数目。以下是我一直在尝试的动态获取字符串的方法: int t; cin>>t //number of strings user wishes enter char *s1[1000009]; //1000009 is the maximum number of digits each string c

这是我花了5个小时编写的代码,逻辑看起来很好,程序似乎完成了它的工作,唯一困扰我的是字符串的动态内存分配。问题没有指定用户必须输入的字符串的初始数目。以下是我一直在尝试的动态获取字符串的方法:

      int t;
      cin>>t  //number of strings user wishes enter 
      char *s1[1000009];  //1000009 is the maximum number of digits each string can have
      for(i=0;i<t;i++)
      {
                s1[i]=(char *)malloc(1000009) 
                cin>>s1[i];
      }
intt;
cin>>t//用户希望输入的字符串数
char*s1[1000009]//1000009是每个字符串可以包含的最大位数
对于(i=0;i>s1[i];
}
不确定这是不是正确的方法。如果不是动态字符串,我也可以通过一种方法来存储二维字符数组

谢谢你,
高拉夫

我会这样做:

int i = 0;
char **s1;
s1 = (char **)malloc(t * sizeof(char *));
while (i < t)
{
 s1[i] = (char *)malloc(1000009 * sizeof(char));
 i++;
}
inti=0;
字符**s1;
s1=(char**)malloc(t*sizeof(char*);
而(i
第一个malloc创建您的t行。
第二个为每行填写alloc 10000009字符

我会这样做:

int i = 0;
char **s1;
s1 = (char **)malloc(t * sizeof(char *));
while (i < t)
{
 s1[i] = (char *)malloc(1000009 * sizeof(char));
 i++;
}
inti=0;
字符**s1;
s1=(char**)malloc(t*sizeof(char*);
而(i
第一个malloc创建您的t行。
第二个填充每行的<100/10000 > /< p> 因为你把这个问题标记成C++,我会这样做:

std::vector<std::string> s1(1000009);
std::向量s1(1000009);
仅此而已-无需使用malloc,无需担心破坏。
如果你使用C++,使用你可用的工具。

,因为你把这个问题标记为C++,我会这样做:

std::vector<std::string> s1(1000009);
std::向量s1(1000009);
仅此而已-无需使用malloc,无需担心破坏。
如果你正在使用C++,请使用你可用的工具。< /P> < P>使用字符串向量,而不是使用MalC/Cux.< /P>
int t;
std::cin >> t;
std::vector<std::string> strings(t); //Create t strings
for(int i = 0; i < t; i++)
    std::cin >> strings[i]; //Read into each string
intt;
标准:cin>>t;
std::vector strings(t);//创建t字符串
for(int i=0;i>字符串[i];//读入每个字符串

使用字符串向量,而不是使用malloc/new

int t;
std::cin >> t;
std::vector<std::string> strings(t); //Create t strings
for(int i = 0; i < t; i++)
    std::cin >> strings[i]; //Read into each string
intt;
标准:cin>>t;
std::vector strings(t);//创建t字符串
for(int i=0;i>字符串[i];//读入每个字符串


我认为您应该使用
std::vector
std::string
进行手动动态分配。不要使用
malloc
进行手动动态分配。而是使用
new
进行手动动态分配。完全不要使用手动动态分配。而是使用
std::string
进行替代。在堆栈上创建1000009个元素的数组是个坏主意。我认为您应该使用
std::vector
std::string
。不要使用
malloc
进行手动动态分配。改用
new
。根本不要使用手动动态分配。改用
std::string
。在堆栈上创建1000009个元素的数组是个坏主意。但如上所述,std::string的向量将更有效。正如他所说d没有编译,我仍然不知道向量如何以任何方式使用malloc或new工作。std::string test;std::vec;int t;int I=0;std::cin>>t;而(I>test;I++;vec.push_-back(test);test.clear();}
@ThomasGrockowiak yes使用向量很好谢谢!很抱歉再次打扰您,代码似乎很好,但在这里看一看需要很多时间,但如上所述,std::string的向量会更有效。正如他所说,它不会编译,而且我仍然不知道向量如何使用malloc或new工作,这将是最好的字符串测试;std::vector vec;int t;int i=0;std::cin>>t;while(i>test;i++;vec.push_-back(test);test.clear();}
@ThomasGrockowiak yes使用向量很好谢谢!很抱歉再次打扰您,代码似乎很好,但在这里花了很多时间看一看,先生,这很有魅力谢谢,显然我有很多关于向量的知识要学!很显然,这是第一次使用向量。它只是描述了运行时错误,上面写着:ter在抛出“std::bad_alloc”what()的实例后调用minate:std::bad_allocMake确保t是有效的。std::vector接受大小的无符号值,因此如果t为负数,则无符号值将非常大。非常确定t永远不会为负数:3sir这很有魅力谢谢,显然我有很多关于向量的知识要学习!很显然,它第一次起作用了,现在它只是描述了运行时e错误说明:在抛出'std::bad_alloc'what():std::bad_allocMake确保t有效。std::vector获取大小的无符号值,因此如果t为负,则无符号值将非常大。非常确定t从不为负:3