原帖由 默难 于 2006-8-19 22:51 发表
malloc
realloc
原帖由 mik 于 2006-8-19 23:09 发表
对于数组不能用realloc改变大小。数组编译器已经定好了大小
不过,基于另一种思想,可以用 malloc/realloc 分配空间,将多余数据存放这些地方,以达到增大数组的效果,我想:您是指这种方法吧! 使数组变 ...
原帖由 默难 于 2006-8-19 23:16 发表
没错啊,这种动态存储的东西一般都是在堆上做得。
缩小空间用realloc也可以
原帖由 mik 于 2006-8-19 23:17 发表
LZ 所说的是数组,数组是静态的!
原帖由 默难 于 2006-8-19 23:19 发表
……
我之所以回复malloc realloc,就是为了告诉LZ,用动态分配。我这手头有事情做,懒得说那么多话了。难道还要我把堆栈在解释一遍吗?
原帖由 mik 于 2006-8-19 23:24 发表
晕,大概我是误解了你的用意,你也误解了我想表达的意思, 是我不对在先
这个堆栈嘛,就不用劳烦你解释了。
原帖由 ccas 于 2006-8-19 22:42 发表
今天有人问了一个关于数组的问题
如果有一个 i 行 j 列的数组,现在要增加它的行数和列数,问要怎么实现
请问这个怎么实现,对数组的类型有区别吗
如果之前分配的数组中已经分配到了数据,要怎样改变大小
原帖由 默难 于 2006-8-20 00:00 发表
如果要在栈上申请一个指定大小的空间,可以用alloca
不过这个函数不在标准C函数库里面
如果系统没有实现这个函数,可以利用内嵌的汇编来修改%esp和%eax的值来实现这个函数。不过修改%esp %eax的方法只适用于x86 ...
原帖由 mik 于 2006-8-20 00:10 发表
esp 的值是不能随便更改的,会破坏栈结构
原帖由 默难 于 2006-8-20 00:21 发表
……你看一下我前面说的,我的目的是在栈上申请指定数目的空间
原帖由 mik 于 2006-8-20 00:28 发表
但凡分配空间,当然是有指定数目,难道随机数目的空间吗?
由程序员来改变 esp 值,只会令栈结构维护更难,你要去考虑销栈问题,这样只会徒然增加工作量
原帖由 默难 于 2006-8-20 00:37 发表
-_-||
我说是随机数目了吗?我说的是实现一个接口和alloca函数匹配的函数
那你就把你函数库里的alloca函数删除吧,否则太难维护了……
算了……我懒得解释了,你google一下吧……谁有闲功夫就帮忙解释一下
原帖由 flw 于 2006-8-20 00:39 发表
这几天对 mik 有了更多的认识。
to mik:
现阶段你应该以继续学习为主、泡论坛为辅。
原帖由 mik 于 2006-8-20 00:40 发表
汗~~ 这种讨论格格不入, 基本上好象对牛弹琴一样 (没贬的意思)
那就STOP了
原帖由 默难 于 2006-8-20 00:47 发表
算了……只能怪我好心 + 爱管闲事 + 较真 + 好为人师 ...
替你google了一下子
你自己看看这里吧:
http://www.opensource.apple.com/ ... /emacs/src/alloca.s
这里是alloca在68000和 ...
原帖由 默难 于 2006-8-20 00:50 发表
看到了一个x86上实现的alloca,mik你看一下吧……今天我有点较真……
[code]
alloca.s
.text
.globl alloca
.align 4
alloca:
popl %edx / return addre ...
原帖由 flw 于 2006-8-20 00:53 发表
哦,倒不是说你什么错了,
你说错的还是很少的,
不过往往都没有分清对象。
原帖由 默难 于 2006-8-20 00:37 发表
-_-||
那你就把你函数库里的alloca函数删除吧,否则太难维护了……
我说是随机数目了吗?我说的是实现一个接口和alloca函数匹配的函数
函数返回之后esp就会返回成调用前的值了……
算了……我懒得解 ...
原帖由 jeffshia 于 2006-8-20 15:06 发表
动不动就是懒得....
看来你是很牛啊
呵呵
原帖由 ccas 于 2006-8-23 18:45 发表
如果我定义了一个数组
int int_ary[3][3]={{1,1,1},
{2,2,2},
{3,3,3}};
现在要把它扩展成 4行4列,
int int_ary[4][4]={{1,1,1,NULL},
{2,2,2,NULL},
{3,3,3,NULL},
{NULL,NULL,NULL,NULL}};
用分配空间的语句(alloc,malloc,remalloc等)要怎么写
原帖由 harly 于 2006-8-24 12:35 发表
嗯,你说的不错,是可以有技巧的。不过如果这样写,在函数里会出现堆栈溢出的,如果在数据区分配的也不怎么行吧。呵呵,你说的对,我们应该摒弃这种写法。
int i;
int arr[10];
...
原帖由 羽人 于 2006-8-24 13:46 发表
这种方法对于函数内部的数组(分配在栈内)和全局数组(分配在数据区内)都是可用的。
这种程序可能你运行很长时间都不会有问题,突然有一天却coredump了。
像我这种写法,在做代码review时很容易被发现 ...
原帖由 harly 于 2006-8-24 14:13 发表
兄弟,不一定噢,刚才情况不溢出,是你的循环次数少了点,我改成了55,就覆盖了堆栈里面的eip了,你运行下看看。
#include<stdio.h>
int main()
{
int arr[10];
in ...
原帖由 happer_xc 于 2006-8-24 21:05 发表
用 realloc 能保证原来数组中的值还在正确的位置上吗?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |