#include <stdio.h>
#include <stdlib.h>
char *get_v()
{
int i,a[8] = {1804289383,846930886,1681692777,1714636915,1957747793,424238335,719885386,1649760492};
char *v;
v = malloc(8);
for(i=0;i<8;i++)
{
v[i] = a[i];
}
// free(v);
return v;
}
int main()
{
char *v1;
v1 = get_v();
/* 使用v1做的事情,此处省略 */
free(v1);
}
以上代码中,get_v函数是想定义一个向量,在函数中使用了malloc,但没有free。
malloc跟free不在一个函数内,感觉很别扭啊
不知道在C语言中定义向量有没有其他方法呢?
12 个解决方案
#1
堆上的空间就是如此管理的,只要malloc和free匹配就好。
#2
在C语言中这是常有的事
即使在C++中,标准模板库也不能解决所有问题,它只能解决最常见的问题,很多时候你一样要在一个函数里new在另一个函数里delete
比较常用的控制方法是,在设计程序结构时划分模块,在同一个模块的不同函数里申请和删除需要用于某个目的的内存,其他模块只应该调用这个模块内的函数,不能自己申请和删除内存
这样程序架构就比较明确,便于维护和修改代码,当然,假如碰上脑残程序员,你设计什么方法都没用
即使在C++中,标准模板库也不能解决所有问题,它只能解决最常见的问题,很多时候你一样要在一个函数里new在另一个函数里delete
比较常用的控制方法是,在设计程序结构时划分模块,在同一个模块的不同函数里申请和删除需要用于某个目的的内存,其他模块只应该调用这个模块内的函数,不能自己申请和删除内存
这样程序架构就比较明确,便于维护和修改代码,当然,假如碰上脑残程序员,你设计什么方法都没用
#3
那有没有更简单点定义向量的办法呢?
#4
不一定非要在一个函数,只要free的那个指针值是malloc返回的就可以了
#5
要简单,就别学c/c++了
c/c++最常用的领域是底层,最大的特点是用程序员的高负荷换来程序运行的高效率,要简单去学java等重视开发效率的语言吧
#6
那我是不是可以理解为,我这么定义向量的方法,是正确,且是唯一的?
#7
那我是不是可以理解为,我这么定义向量的方法,是正确,且是唯一的?
c语言没有对象的概念,更没有向量这种东西
要玩C语言就老老实实从内存开始思考
话说我讨厌向量这个模板名,进行数学运算的时候命名很头疼
#8
那我是不是可以理解为,我这么定义向量的方法,是正确,且是唯一的?
楼主这样是可以的,但是不建议这样做,编码风格不好。
如果楼主要在get_v函数外面free,建议就要在外面malloc了再将空间地址传进去。在getv里面malloc了就要尽量在getv里面free。确实存在很多情况,malloc和free在不同函数里面,那建议都封装起来,比如有个getv来做malloc,就再封装个freev来做free的动作。
#9
把free(v)放在一个函数releas_V()里,看起来就和get_v()配对了。
#10
只需要把malloc申请的空间的首地址给free函数就可以,不一定是初始的指针~
#11
将
malloc和free
象
fopen和fclose
那样用。
malloc和free
象
fopen和fclose
那样用。
#12
配对比较好,不配对就必须,时刻记住分配了,要释放。
使用常了就习惯了。
比如你见一个链表,你不能刚建好就释放所有节点。
关键记住配对。
你定义一个创建函数,一个销毁函数。
并配对使用就行了。没有必要那么纠结。
如果是C++,可以封装一下。
使用常了就习惯了。
比如你见一个链表,你不能刚建好就释放所有节点。
关键记住配对。
你定义一个创建函数,一个销毁函数。
并配对使用就行了。没有必要那么纠结。
如果是C++,可以封装一下。
#1
malloc跟free不在一个函数内,感觉很别扭啊
堆上的空间就是如此管理的,只要malloc和free匹配就好。
#2
在C语言中这是常有的事
即使在C++中,标准模板库也不能解决所有问题,它只能解决最常见的问题,很多时候你一样要在一个函数里new在另一个函数里delete
比较常用的控制方法是,在设计程序结构时划分模块,在同一个模块的不同函数里申请和删除需要用于某个目的的内存,其他模块只应该调用这个模块内的函数,不能自己申请和删除内存
这样程序架构就比较明确,便于维护和修改代码,当然,假如碰上脑残程序员,你设计什么方法都没用
即使在C++中,标准模板库也不能解决所有问题,它只能解决最常见的问题,很多时候你一样要在一个函数里new在另一个函数里delete
比较常用的控制方法是,在设计程序结构时划分模块,在同一个模块的不同函数里申请和删除需要用于某个目的的内存,其他模块只应该调用这个模块内的函数,不能自己申请和删除内存
这样程序架构就比较明确,便于维护和修改代码,当然,假如碰上脑残程序员,你设计什么方法都没用
#3
那有没有更简单点定义向量的办法呢?
#4
不一定非要在一个函数,只要free的那个指针值是malloc返回的就可以了
#5
那有没有更简单点定义向量的办法呢?
要简单,就别学c/c++了
c/c++最常用的领域是底层,最大的特点是用程序员的高负荷换来程序运行的高效率,要简单去学java等重视开发效率的语言吧
#6
那有没有更简单点定义向量的办法呢?
要简单,就别学c/c++了
c/c++最常用的领域是底层,最大的特点是用程序员的高负荷换来程序运行的高效率,要简单去学java等重视开发效率的语言吧
那我是不是可以理解为,我这么定义向量的方法,是正确,且是唯一的?
#7
那我是不是可以理解为,我这么定义向量的方法,是正确,且是唯一的?
c语言没有对象的概念,更没有向量这种东西
要玩C语言就老老实实从内存开始思考
话说我讨厌向量这个模板名,进行数学运算的时候命名很头疼
#8
那我是不是可以理解为,我这么定义向量的方法,是正确,且是唯一的?
楼主这样是可以的,但是不建议这样做,编码风格不好。
如果楼主要在get_v函数外面free,建议就要在外面malloc了再将空间地址传进去。在getv里面malloc了就要尽量在getv里面free。确实存在很多情况,malloc和free在不同函数里面,那建议都封装起来,比如有个getv来做malloc,就再封装个freev来做free的动作。
#9
把free(v)放在一个函数releas_V()里,看起来就和get_v()配对了。
#10
只需要把malloc申请的空间的首地址给free函数就可以,不一定是初始的指针~
#11
将
malloc和free
象
fopen和fclose
那样用。
malloc和free
象
fopen和fclose
那样用。
#12
配对比较好,不配对就必须,时刻记住分配了,要释放。
使用常了就习惯了。
比如你见一个链表,你不能刚建好就释放所有节点。
关键记住配对。
你定义一个创建函数,一个销毁函数。
并配对使用就行了。没有必要那么纠结。
如果是C++,可以封装一下。
使用常了就习惯了。
比如你见一个链表,你不能刚建好就释放所有节点。
关键记住配对。
你定义一个创建函数,一个销毁函数。
并配对使用就行了。没有必要那么纠结。
如果是C++,可以封装一下。