langyo_v3
没错我是langyo= =
怎么喂龙请去末地看申诉…

最近,我那个压缩算法就要出炉了,但在写C++版的算法时遇到了问题,问题出在动态内存分配上。
众所周知,要声明一个静态数组,其初始化下标必须是一个常量表达式。动态数组则比较有趣了,它需要你给个指针,然后new,动态开辟空间,用完后还得delete。
现在的问题是,我的压缩算法需要能够动态调整的内存空间,但理论来讲数组下限如果用变量会满屏Error红灿灿。如何才能以new申请出我动态指定量的内存?
别急着回复,我还没讲完。
我使劲查了资料,发现其实大家都是可以这么玩的,以变量为下限来new。不过,我看见的都是诸如char p*=new bytes[i];这种玩意。所以,其它数据类型不行,但char可以喽?如果不行,那GCC又是怎么做的呢?怎么才能做到用new动态申请内存?

最后,可能有人要我用malloc()和free(),也可能有人要我改用文件流替代数组,也可能有人建议我用链表、堆或向量…但我希望能用new,这个面向对象的产物,而不是一堆库,那太依赖系统了(不用反驳,库确实有一定依赖性,各系统GCC的实现不一样)。


感谢你能抽出时间听我扯皮,也希望你能给我建设性的回复。

土球球
本帖最后由 ustc_zzzz 于 2017-4-7 02:06 编辑

希望不要出现v4
楼主感兴趣的话可以看看C++程序的内存模型。

通常而言,一个程序在运行的时候分为四个区:

如果是诸如下面这样的类型声明时分配内存:
  1. char c[450] = {0};
复制代码
那么相应的内存属于静态内存会被分配到栈区。
如果是像楼主提到的那样的使用new申请内存:
  1. char *c = new char[450];
复制代码
那么相应的内存属于动态内存会被分配到堆区。

不过楼主似乎提到了变长数组?就像这样:
  1. #include <cstdlib>
  2. int i = std::rand() & 0xff;
  3. char c[i];
复制代码
这种情况下,程序会按照给定的值自动在栈上分配相应长度的数组。
不过,楼主你问的这玩意,真的和MC有关么。。。

第一页 上一页 下一页 最后一页