Redian新闻
>
linux 下从c++动态内存操作问题,heap size不够还是别的?
avatar
linux 下从c++动态内存操作问题,heap size不够还是别的?# Programming - 葵花宝典
r*e
1
没有使用STL的情况下,有如下程序:
int *array = new int(1000000);
if (array == 0) cout<for (...) //赋值
array[i] = 随机数;
但是当i=33790后,就出现segmentation fault,
试过多次总是在33790后出错。如果array换成double
则改为在33790/2 = 16895后出错。显然和memory size
有关系。
既然array pointer没有返回空值,说明内存申请到了,但是
为什么出错呢?是系统heap size不够还是什么别的原因?
ulimit -a 显示stack size 为(kbytes -s) 10240, 而
33790×4没有10240k大啊?man ulimit说单位是1024byte,
也不知道ulimit -a中显示的到底是byte呢还是kbyte。
反正试过‘ulimit -s 很大的数’ 也没区别。
另外,如果用 int array[1M]的话,可以运行,但是到3M左右
就又是segmen
avatar
p*o
2
That's why you should use STL.

It should be 'new int[1000000]'. It's too easy to make an error
with new/delete for beginners.
int array[1M] is on the stack, whose size is commonly constrained
to abort an infinite recursion.

【在 r*****e 的大作中提到】
: 没有使用STL的情况下,有如下程序:
: int *array = new int(1000000);
: if (array == 0) cout<: for (...) //赋值
: array[i] = 随机数;
: 但是当i=33790后,就出现segmentation fault,
: 试过多次总是在33790后出错。如果array换成double
: 则改为在33790/2 = 16895后出错。显然和memory size
: 有关系。
: 既然array pointer没有返回空值,说明内存申请到了,但是

avatar
r*e
3
在STL出现之前怎么处理的呢?比如排序问题。
或者开发的软件没有使用STL又怎么办呢?

【在 p***o 的大作中提到】
: That's why you should use STL.
:
: It should be 'new int[1000000]'. It's too easy to make an error
: with new/delete for beginners.
: int array[1M] is on the stack, whose size is commonly constrained
: to abort an infinite recursion.

avatar
p*o
4
用vector你可以把下标检查打开,不用的话你就要多花时间
自己耐心检查下标是否出界,总之debug是需要积累经验的。

【在 r*****e 的大作中提到】
: 在STL出现之前怎么处理的呢?比如排序问题。
: 或者开发的软件没有使用STL又怎么办呢?

avatar
a*f
5
int *array = new int(1000000);
应该是 int *array = new int[1000000]; 注意后面的方括号
否者就是分配一个int的空间
avatar
r*e
6
还是得用STL的vector?
如果必须要绕过STL的话该怎么办?
修改程序还是系统配置?

【在 p***o 的大作中提到】
: 用vector你可以把下标检查打开,不用的话你就要多花时间
: 自己耐心检查下标是否出界,总之debug是需要积累经验的。

avatar
r*e
7
笔误,谢谢
不谈数组的问题,也不使用STL的vector该怎么找到问题
并解决呢?

【在 a***f 的大作中提到】
: int *array = new int(1000000);
: 应该是 int *array = new int[1000000]; 注意后面的方括号
: 否者就是分配一个int的空间

avatar
k*f
8
就4M的空间,肯定是其他地方的问题
你把代码全部贴出来看看

【在 r*****e 的大作中提到】
: 笔误,谢谢
: 不谈数组的问题,也不使用STL的vector该怎么找到问题
: 并解决呢?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。