黑马程序员技术交流社区
标题:
关于内存分配的问题
[打印本页]
作者:
2014571245
时间:
2014-4-26 13:35
标题:
关于内存分配的问题
本帖最后由 2014571245 于 2014-4-27 10:45 编辑
我用一行这样的代码分配一个巨大的数组, 用于数字运算:
double *array = malloc(300 * 300 * sizeof( double ));
malloc() 并没 有返回 null, 但是程序运行得有些奇怪,
好像改写了某些内存, 或者 malloc() 并没有分配我申请的那么多内存,为什么会产生这样的错误?
作者:
Invoker
时间:
2014-4-26 13:40
300 * 300 * sizeof( double ) 内存溢出了 不能放在int16里,你可以考虑使用 300 * (300 * sizeof(double))
作者:
脸皮猴
时间:
2014-4-26 15:48
{:3_46:}我很诧异。。。为什么你要申请那么大的内存给一个double型指针变量,你申请这么大一块内存需要存上面数据进行计算?能详细说下,你怎么运算了。。出什么错了吗?一个double型数据值占用8个字节。你这是需要存放一个什么数据?
作者:
251638256
时间:
2014-4-26 20:07
话说malloc()函数参数是个size_t类型的参数吧
应该是个Unsigned int.
楼上的Int16怎么来的?
还有那两个表达式有区别吗
而且这句代码没问题 就是申请一个90000个double类型元素的空间啊
作者:
ios_fce
时间:
2014-4-26 20:39
extern void *malloc(unsigned int num_bytes);这是malloc函数的原型,括号里放的是int类型的数据类型(unsigned忽略符号就不说),既然是int类型,括号里面的数的最大值为2147483648(java中是这么大,2的31次方-1),所以300 * 300 * sizeof( double )没有内存泄露,所以创建内存成功不会返回Null,它返回一个指向内存字节数为300 * 300 * 8(64位编译器)这么大的内存的指针,懂了吧!!!!
作者:
ios_fce
时间:
2014-4-26 20:53
只是用double *array拿数据的时候只会按照顺序,拿八个字节,其余就不管了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2