malloc开辟内存空间的有关问题
malloc开辟内存空间的问题?如果n 8, 应该只可能保存2个整形,为什么我可以保存和使用8个整形数?#include
malloc开辟内存空间的问题?
如果n = 8, 应该只可能保存2个整形,为什么我可以保存和使用8个整形数?
#include <stdio.h>
#include <malloc.h>
int * new_1(int n) {
int * l = (int *)malloc(n);
return l;
}
int main () {
int n = 0;
printf ("Input n:\n");
scanf ("%d", &n);
int *p = new_1(n);
for (int index = 0; index < n; index++)
scanf ("%d", p +index);
for (index = 0; index < n; index++)
printf ("%d ", *(p +index) );
printf ("\n");
return 0;
}
[解决办法]是只能保存2个整形,但是,你修改这8个字节以外的内存空间,结果是未知的。因为被你修改的空间中不知道保存了什么重要的数据。
[解决办法]1、所谓内存分配是你获取有效内存地址,但是你写入超出部分,虽然是可以获取到正常数据,但是如果那部分内存刚好被使用了,那么数据就会被修改,是有风险的。
2、你申请内存后需要释放
[解决办法]这个就像你使用数组,比如说,你声明了一个数组int Array[3],但是你可以操作Array[4]这个元素所在的内存(该内存并没有分配给你,但是你使用了),这种操作很危险.
[解决办法]其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
[解决办法]不是每个违章建筑都会被立刻拆除的
[解决办法]同意赵老师的说法