char数组的realloc动态数组
realloc dynamic array of char array
我必须在数组中存储一些char数组。但我不知道我要储存多少。
什么是最好的:用一个小尺寸(比如1)初始化我的数组,然后重新分配所有内容?我应该如何使用realloc或malloc?
不幸的是,我不能使用向量、stl容器或字符串。增加向量的大小非常容易,我试图理解malloc和realloc,但我不。。。
char ** array=(char**)malloc(10*sizeof(char*));
for (int i=0;i<10;i++)
array[i]="10";
array=(char **)realloc(array,(sizeof(array)+1)*sizeof(char*));
array[10]="12";
我理解基本原理是的。是这样的吗?
看起来你不能使用向量,但通常这正是它们的目的。
您的解决方案的问题是,它更像是C而不是C++,您使用的是char数组,而在C++中,您应该使用string
,使用malloc
和realloc
,而在C++中,您应使用new
。
此外,您需要为每个间接级别分配内存,因此对于char **
,您至少需要2次对malloc
的调用。这里有一个更正的解决方案(它仍然几乎是C,而不是真正的C++,注意你没有使用一个C++头):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
//allocate a buffer of 10 pointers
size_t array_size = 10;
char ** array=(char **)malloc(array_size * sizeof(*array) );
if (!array)
return -1;
//now allocate the 10 pointers with a buffer to hold 42 characters
for (int i = 0; i < array_size; i++) {
array[i]= (char *)malloc( 42 * sizeof (*array[i]) );
if (!array[i])
return -1;
strcpy(array[i], "10");
}
//for some reason we need to increase array size by 1
++array_size;
array = (char **)realloc(array, array_size * sizeof(*array) );
array[array_size-1] = (char *)malloc(42 * sizeof(*array[array_size-1]) );
if (!array[array_size-1])
return -1;
strcpy(array[array_size-1], "12");
}
相关文章:
- std::向量与传递值的动态数组
- 将数组动态分配到具有指针参数的函数中
- 我可以以某种方式使我的矢量/数组动态更改装置数量吗?
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 为什么C 没有方便的方式来为多维数组动态分配内存
- 如何制作具有动态大小的数组?动态数组的一般用法(可能还有指针)
- c++中的数组动态内存分配
- 多维数组动态分配的内存图
- 如何在 c++ 中使用 2-D 固定数组为 4-D 数组动态分配内存
- C++ 我在数组/动态内存方面遇到了一些问题
- C++ 中从数组动态强制转换
- C++中高维数组动态内存分配的正确方法.
- 从 C++ 结构中包含的指针数组动态分配和访问内存
- 对象数组动态内存分配
- 为二维数组动态分配内存时出错
- 如何将2d数组动态分配给结构
- 为结构数组c++动态分配内存
- 将数组动态添加到多维数组
- 类中的类数组-动态数组(c++)有问题
- 分配对象数组动态冻结