c++-初学者求教,关于数组分配内存的问题

问题描述

初学者求教,关于数组分配内存的问题

在c++中对于string这样的类类型,因为字符长度可变,在数组中怎样分配内存空间???

解决方案

存的是string的指针,他只想实际字符串地址

解决方案二:

字符串分配内存,一般可以用动态分配。但是还要看你的具体要求

解决方案三:

string是长度固定的,怎么叫可变?
字符串的相加、赋值等等都会产生一个新的字符串对象。

解决方案四:

动态分配,当空间不够了,就分配一块更大的空间,拷贝内容,删除原来的空间

解决方案五:

string类型是一个对字符数组的封装。string类型的变量实际上就是一个字符型指针,一般指向所指字符串的首地址。这个指针固定占有内存4字节,即一个整型数字。

解决方案六:

你可以用vector来存放字符vector

解决方案七:

使用new来动态分配

解决方案八:

根据输入到string对象中字符串的长度,动态分配。空间不够了会另外分配空间,然后删除,拷贝。

解决方案九:

存指针,动态分配空间,如果空间不够,当长度再次变化的时候,拷贝到新的更大的空间中,原来的删除。

时间: 2024-08-04 07:16:36

c++-初学者求教,关于数组分配内存的问题的相关文章

c语言-初学者求教 关于数组过大的问题

问题描述 初学者求教 关于数组过大的问题 如果定义的数组过大,编译器不通过,以前知道动态分配内存,或者修改内存模式解决今天突然看到一个程序,直接把数组定义成全局数组,便ok了 why?#includeint c[1001][1001];int main(){ int nmij; char a[1001]b[1001]; scanf(""%d %d""&n&m); scanf(""%s""a); scanf(&q

shell脚本-shell在声明数组的内存分配

问题描述 shell在声明数组的内存分配 shell在声明数组的时候系统为数组分配内存了吗,比如array[100000000]=1000这个array数组的有多大 解决方案 看下内存使用量就知道了 解决方案二: 数组的动态内存分配数组的动态内存分配Java数组及其内存分配

初学者求教,c++中new如何分配数组内存

问题描述 初学者求教,c++中new如何分配数组内存 c++中使用new定义动态数组时,如果数组大小已知,那么会如何分配内存?是在程序运行时按照使用的元素数分配还是按照数组大小一次性分配(和普通数组一样的方式) 解决方案 也是一次性分配,你可以自己测试下,申请完,看它的大小 解决方案二: C++ new内存分配 解决方案三: 运行时肯定已经知道数组的大小了,数组多大就分配多大的内存. 解决方案四: 都可以的. 如果要分配的大小比较大的话,建议用new new还需要你delete,是在堆分配空间

初学者求教,如何测量动态分配的内存长度,以及如果用malloc创建的数组,怎样测量数组长度

问题描述 初学者求教,如何测量动态分配的内存长度,以及如果用malloc创建的数组,怎样测量数组长度 初学者求教,如何测量动态分配的内存长度,以及如果用malloc创建的数组,怎样测量数组长度 解决方案 楼主首先要明白一点就是数组是自定义类型.c/c++的三种自定义类型:1.指针:2.结构体/联合(包括位域):3.数组 既然你是动态分配的,那么sizeof如何能强大到侦探你的动态的情况呢?malloc是个函数,原型为extern void *malloc(unsigned int num_byt

java-JAVA中数组定义new分配内存空间的问题

问题描述 JAVA中数组定义new分配内存空间的问题 JAVA中在定义一个数组的时候,根据书上内容形式,举一个例子 int[] arr=new int[]{3,4,5,}; 但是在实际中,我见到过或者使用更多的是 int[] arr={3,4,5}; 这个时候要不要new去分配内存又有什么区别呢? 在JAVA中 是不是没有new 分配的时候 数组arr在内存栈中 new分配内存空间时 数组arr就到了堆内存中呢 解决方案 现在也不是很理解,找了一个大神告诉我说 第二种是静态初始化,在编译的时候就

java中创建数组时内存怎么分配????

问题描述 java中创建数组时内存怎么分配???? int[] arr=new int[3]; 问题: 上面创建int数组时,怎么分配内存的?arr是一个引用变量,是通过指针指向new int[3](存在堆里面)对吧,那么,栈里面为arr分配几个指针,是3个还是1个? 补充: 疑问1****: 其实我就是想知道java中创建数组时,栈中分配几个指针,是一个还是"数组长度"个? 疑问2****: 如果是一个,那么,这个指正指向谁???? 疑问3****: 如果指向的是第一个元素,那么,该

c++ sprintf-c++字符数组赋值 内存分配

问题描述 c++字符数组赋值 内存分配 string str1="1234.56"; char ch[str1.length()+1]; double dtude=atof(str1.c_str()); sprintf(ch, "%.5f", dtude); cout<<ch<<endl; 运行的结果为:1234.56000 但是实际上,ch的大小是8,却存储了10个元素.valgrind 也没有检测到内存非法读写的问题,运行都正常,有大神知

c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求

问题描述 c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求 #include #include int main() { char*s; scanf("%s",s); //printf("%sn",s); //int n = strlen(s); //printf("%dn",n); char ret[56]; return 0; } 解决方案 s只是指针变量,没有分配内存 char*s; s = mall

数组和内存控制

数组和内存控制 一. 数组初始化: a) 静态初始化: 初始化时由程序员指定数组元素值:系统会自动决定该数组的长度. b) 动态初始化: 初始化时,程序员指定数组的长度,系统默认为数组元素赋初始化. //采用静态初始化方式初始化第一个数组 String[] books = new String[] { "仓央嘉措诗集", "人生若只如初见", "当时只道是寻常" }; //采用静态初始化的简化形式初始化第二个数组 String[] names =