使用字符串或字符动态分配(数组)
dynamic allocation (arrays) with string or char
这里没有问题:
int *x;
x = (int *) malloc(0 * sizeof(int));
int value = 5;
x = (int *) realloc(x,(value)*sizeof(int));
但是对于字符串我不能这样做:
我想对y[]数组这样做,像这样:
y[0]="hello"
y[1]="how are you"
我该怎么做呢?
std::vector<std::string> y;
y.push_back("hello");
y.push_back("how are you");
不要在c++中使用malloc
、realloc
或free
。不要将char*
用于除互操作之外的目的。在你真正需要指针之前,不要使用它们(数组也是如此)。
不能在std::string
对象的数组上使用realloc
,因为realloc
通过位复制来移动数据,而这在一般对象上是不允许的。
标准类std::vector
是对象的通用容器,它可以正确地移动和复制对象(使用复制构造函数、赋值和类似的方法),并且可以改变其大小,例如使用resize
方法。所有需要的内存被自动分配和释放。
以std::vector
为例,您可以编写如下代码:
std::vector<std::string> v; // An empty vector
v.resize(10); // Now size is 10 elements (all empty strings "")
v[0] = "Hello"; // First element is now the string "Hello"
v[1] = "world."; // Second element is now the string "world."
v.resize(2); // Now v.size() is 2
v.push_back("How's going"); // Now the size is 3 and third element is filled.
帮自己一个忙,找一本好的c++书,从头到尾读一遍。c++是一门强大但复杂的语言,如果你试图通过尝试编译器来学习它,你会犯一个可怕的错误,原因有很多。
你现在正在做的不是c++…您可以对c风格的字符串做任何您想做的事情,但是您需要一个指向char
类型的指针数组,以允许您访问数组中每个字符串分配的内存。可以这样做:
char* y[2];
y[0] = strdup("hello");
y[1] = strdup("how are you");
你还需要记住,你的y
数组现在"拥有"指针,所以你必须在数组中的每个指针上调用free()
,以避免任何内存泄漏,如果你决定改变每个指针指向的字符串。
如果你想用一个习惯的c++解决方案,而不是恢复到C风格的字符串,那么你应该使用std::string
和std::vector
…这样做可以避免内存泄漏问题,以及分配和释放与动态分配的c -string相关的内存。
你可以做你想做的事情就像处理整数一样:
typedef const char *c_string;
c_string *y;
y = (c_string *) malloc(0 * sizeof(c_string));
int value = 5;
y = (c_string *) realloc(y,(value)*sizeof(c_string));
y[0]="hello";
y[1]="how are you";
这个不能用于非const char *
,所以这个例子的可用性有限。
相关文章:
- 字符指针数组内存分配
- 当按下 SFML C++时,如何在数组中分配值
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 将数组动态分配到具有指针参数的函数中
- C++ 无法将字符数组变量分配给字符串变量
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 为什么C 没有方便的方式来为多维数组动态分配内存
- 动态数组仅分配一个元素
- c++中的数组动态内存分配
- 多维数组动态分配的内存图
- 如何在 c++ 中使用 2-D 固定数组为 4-D 数组动态分配内存
- 动态数组内存分配如何工作
- C++中高维数组动态内存分配的正确方法.
- 从 C++ 结构中包含的指针数组动态分配和访问内存
- 对象数组动态内存分配
- 为二维数组动态分配内存时出错
- 如何将2d数组动态分配给结构
- 为结构数组c++动态分配内存
- 简单的数组内存分配与大小动态分配和预定的大小
- 分配对象数组动态冻结