创建动态数组时:
int *arr = (int *) malloc( 4 * sizeof(int) );
所以它应该包含4个整数(对于空间问题,可能需要2到3个),但是为什么这样做呢:
for ( int x = 0; x < 30000; x++) {
arr[x] = x;
}
我的意思是不应该有这么多的空间来容纳30000个变量,而且它工作得很好,这是什么原因呢?它和c std::vector一样吗?或者我如何理解它?
如果我把循环范围设为50000,它会崩溃,但它甚至应该像索引a[100]或之前那样崩溃,因为数组是4个元素大的。
如果这很重要的话,我正在使用gnu/linux。
我努力去理解它。
请帮忙
C不承担阵列限制的责任。如果希望确保不会超出分配的空间,则需要创建一个表示分配空间大小的变量,并在malloc命令和for循环中使用它。
你对C的理解需要提高,这样你才能理解使用低级语言有它的局限性和责任。
C对字符数组进行伪内存检查,通过在每个“字符串”的末尾加一个null(0)来完成,但这只适用于某些方法和技术。
正如上面的评论所提到的,C不是一种“绑定检查”语言(如果这是您所需要的,那么有很多选择,从D到Nim,也可以很容易地与纯ANSI C混合)。
现在,回到你的问题。
你所做的是为4 int分配一些内存。到目前为止还不错。
您可以访问内存的其他部分(或比最初分配的内存更多的内存,请参阅:超出范围)并侥幸逃脱,这并不意味着您应该这么做。它可能会崩溃,也可能不会。这就是所谓的“未定义行为”。
现在,如果你想安全起见,就按你应该的方式去做:
null 这是正确的理解吗?如果是这样,那么在使用指针与malloc()连接时,是否总是使用数组算术是明智的? 谢谢你,亚历克斯
今天,我读到了《C编程语言》(第二版Brian W.Kernighan&Dennis M.Ritchie)第167页,发现作者说我必须强制转换。以下是书中的部分: 7.8.5存储管理 函数malloc和calloc动态地获取内存块。
malloc(配置内存空间) 相关函数 calloc,free,realloc,brk 表头文件 #include<stdlib.h> 定义函数 void * malloc(size_t size); 函数说明 malloc()用来配置内存空间,其大小由指定的size决定。 返回值 若配置成功则返回一指针,失败则返回NULL。 范例 void p = malloc(1024); /*配置1k的内存
malloc 配置内存空间 相关函数 calloc,free,realloc,brk 表头文件 #include<stdlib.h> 定义函数 void *malloc(size_t size); 函数说明 malloc()用来配置内存空间,其大小由指定的size决定。 返回值 若配置成功则返回一指针,失败则返回NULL。 范例 void p = malloc(1024); /*配置1k的内存
什么是 CGI? 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。 CGI 规范目前是由 NCSA 维护的,NCSA 定义 CGI 如下: 公共网关接口(CGI),是一种用于外部网关程序与信息服务器(如 HTTP 服务器)对接的接口标准。 目前的版本是 CGI/1.1,CGI/1.2 版本正在推进中。 Web 浏览 为了更好地了解 CGI 的概念,
主要的困惑是:第一个代码不管它的错误,仍然可以修改数组元素,而第二个代码,不能修改数组元素;因为两个函数都传递数组的地址;我们通过地址来操作数组元素