Moh*_*zas 1 c++ pointers vector
我需要从我从另一个函数获得的char**变量填充一个vector变量.
我自己尝试了以下程序:
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
char** getS();
int main()
{
int i;
vector<string> a;
cout << "Hello World" << endl;
char** b=getS();
char c[][5] = {"one","two","thr"};
//a.insert(a.begin(), b, b+3);
for(i=0;i<3; i++)
{
a.push_back(b[i]);
}
for(i=0;i<3; i++)
free(b[i] );
free(b);
for(i=0;i<3; i++)
{
cout <<a[i].c_str() << endl;
}
return 0;
}
char** getS()
{
char** list;
int number_of_row=3,number_of_col =5,i;
list = (char**)malloc(sizeof(char*)*number_of_row);
for(i=0;i<number_of_row; i++)
{
list[i] =(char*) malloc(sizeof(char)*number_of_col);
list[i] ="Hello";
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
我尝试在这个网站上执行它.
我收到一个无效的指针错误和控制台中的转储.但是我相信在将值推入向量之后,指针可以像我上面那样被释放.如果我删除指针b的释放,那么代码工作正常.
我需要在释放填充它的原始char**变量后使用此向量.
char**中的字符串数组的长度在我的示例中是硬编码的.
问题是这一行:
list[i] ="Hello";
Run Code Online (Sandbox Code Playgroud)
这不会将字符串复制到已分配的内存中,而是会覆盖指针.在该语句之后,您丢失了已分配的指针,而是将其指向字符串文字(由编译器静态分配,不应由您自由).如果你坚持使用字符指针,你应该std::strcpy用来复制字符串内容.
但是,你是用C++编程的,那你为什么还要烦恼?你有std::vector,你有std::string,通过你的程序使用它们,你不会有这样的问题.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |