c - 当我错过 C 中的动态内存分配时,为什么不会出现编译错误?
问题描述
假设我正在尝试编写一个在 C 中创建简单链表的函数。
函数是这样的:
node* createLinkedList(int n) {
int i = 0;
node* head = NULL;
node* temp = NULL;
node* p = NULL;
for (i = 0; i < n; i++) {
//create isolated node
temp = malloc(sizeof(node));
printf_s("\nEnter the data for node number %i:", i);
scanf_s("%d", &(temp->data));
temp->next = NULL;
if (head == NULL) {
//if list is empty then make temp as first node
head = temp;
}
else {
p = head;
while (p->next != NULL)
p = p->next;
p->next = temp;
}
}
return head;
}
如果我故意删除temp = malloc(sizeof(node));
程序编译的行,但我得到一个运行时错误(显然)。
我的问题是:编译器不应该警告我没有为temp
变量分配内存吗?它是否隐式分配该内存?如果是这样,怎么做?
解决方案
根据定义,malloc
不会隐式分配内存。这个函数的目的是返回一个有效的内存地址,这显然不能被编译器验证,因为它会在运行时被调用。
此时,编译器只是假设指针是有效的。它无法猜测指针是否已经指向有效的内存地址。
推荐阅读
- android - 使用存储在服务器中的图像路径在 android studio 中显示 ImageView
- ruby-on-rails - Rails 地理编码器 gem 查找城市
- c# - 使用 moq 忽略方法
- excel - SSIS将自定义标题添加到Excel文件
- python - Python for 循环未正确迭代第二个条件
- python - Python YouTube API 检索视频列表
- javascript - 使用模板文字记录多维数组
- python - django / Apache2 服务器
- mobx - 异步调用的 Mobx 状态
- unit-testing - 如何将任何服务注入 Symfony 中的 WebTestCase 子类?