c - 如何解决 C 中的动态内存分配问题?
问题描述
这是任务;
定义一个接受两个整数参数的函数。该函数返回指向它将动态分配的整数值的指针。如果参数值相同,则实现一个函数为整数变量动态分配内存。分配时函数应将变量初始化为0。如果参数的值不同,则不分配内存,函数返回NULL。
我创建了我的代码,但我认为它不好:
#include <stdio.h>
#include <stdlib.h>
int* funk(int a, int b ){
int *p;
if(a == b){
p = (int*)calloc(a,sizeof(int));
return p;
}
else{
return NULL;
}
}
int main(void){
int *p = NULL;
p = funk(4 , 4);
printf("%d", *p);
free(p);
return 0;
}
那么,有人可以检查此代码并帮助我吗?
解决方案
所以你知道,这是一个非常人为的练习。您通常不必为单个整数分配内存。但是有时返回指针有时返回 NULL 的函数是一个真正的问题。
在 C 中,您经常需要注意函数未能返回有效值。在这种情况下,您需要funk
在尝试打印和释放它之前检查它没有返回 NULL。尝试使用 NULL 指针是未定义的行为,并且可能会导致内存冲突,例如分段错误。
int *p = funk(4 , 4);
if( p != NULL ) {
printf("p = %d\n", *p);
free(p);
}
else {
puts("Give us the funk");
}
此外,您只想分配一个整数,因此将 1 作为单位数传递给calloc
. 并且不要投射 calloc 或 malloc,这是不必要的混乱。C会为你做演员。
// Allocate space for 1 integer, initialize it to 0, and assign it to p.
p = calloc(1, sizeof(int));
推荐阅读
- java - 用户卸载我的应用后,Google Drive 应用文件夹会被删除吗?
- python - 谁能解释 tf.random_normal 和 tf.truncated_normal 形状参数?
- html - 内部下拉菜单上的引导折叠动画
- angularjs - 无法从angularjs中的facebook登录获取电子邮件
- javascript - VueJS 在循环中单独更改表格的行
- tcltk - 如何在 tcl 中从不同的 shell 链接程序
- c# - 多线程文本处理
- html - 为什么我的标签不起作用
- python - 如何在封闭域上定义的 Python 3 中创建函数?
- vb.net - 如何让两个不同的物体以不同的速度“反弹”,只有当它们到达某个点时