free问题

到百度贴吧首页
新闻   网页   贴吧   知道   MP3   图片   视频   百科
    吧内搜索 | 帮助
  • 共有23篇贴子

free问题

1楼

我在VC60 中调试

#include <stdio.h>
#include <stdlib.h>

int main ()
{
 int i,n;
 int * buffer;

 printf ("How long do you want the string? ");
 scanf ("%d", &i);

 buffer = (int*) malloc (i+1);
 if (buffer==NULL) exit (1);

 for (n=0; n<i; n++)
 buffer[n]=n+1;

 for (n=0; n<i; n++)
 printf ("Random string: %d\n",buffer[n]);
 free (buffer);

 getch();


free (buffer);那里会出错不知何故

2楼

以上是221.202.22.*的朋友提出的问题,
希望以后别外开帖讨论,不要混在别的主题里。


6 回复:希望吧主多贴代码 
 在vc6.0动态数组是用new和delete。 
 
 作者: elva6401 封 2004-9-30 09:28   回复此发言 删除此发言

3楼

elva6401说的new delete是C++里的,不是C里的,C里用MALLOC FREE是对的。
另外,我在DEVCPP GCC3.3里运行该程序是正常的,不知道那位朋友为什么在FREE处出错。

请把错误的具体提示贴出来,
同时也希望大家学会怎样提问。

221.202.22.*

4楼

错误提示 after normal block(#18) at 0x00780eb0

5楼

哪位用VC的朋友帮忙调试一下。
我早已不用VC了,回答不了这个问题。

221.202.22.*

6楼

还想问一下,这种动态分配有什么意义,能举个例子吗

7楼

他在VC60 中调试,Vc60就是运行c++代码的。

8楼

6:
参见下面的帖子。
http://post.baidu.com/f?ct=335609856&tn=baiduPostBrowser&sc=31305340&z=4201196&pn=0&rn=50&lm=0&word=c%D3%EF%D1%D4#31305340

7:
VC是C/C++的编译器,既可以编译C,也可以编译C++

202.116.24.*

9楼

int * buffer;
buffer = (int*) malloc (i);
这样可以申请一buffer[i]动态数组,如果要申请一buffer[i][i]动态数组,怎么办?是不是:
int * buffer;
buffer = (int*) malloc (i*i);
望回答。

10楼

9:
不是的.
我给一个例子,具体请参考置顶帖子中的
深入理解C语言指针的奥秘:http://post.baidu.com/f?kz=5932198

int main(int argc,char**argv)
{
    int **a;
    a=(int **)malloc(sizeof(int *)*10);
    for(int i=0;i<10;i++)
    {
        a[i]=(int *)malloc(sizeof(int)*10);
    }
    for(int i=0;i<10;i++)for(int j=0;j<10;j++)a[i][j]=i*j;
    for(int i=0;i<10;i++)for(int j=0;j<10;j++)printf("%d\t",a[i][j]);

    for(int i=0;i<10;i++)free(a[i]);
    free(a);

    return 0;

}

11楼

编译时没问题,运行时有问题

12楼

11:
你是说我10楼的有问题吗?
你用的什么编译器?运行时有什么错误提示?

13楼

把buffer = (int*) malloc (i+1);改成 buffer = (int*)malloc (sizeof(n)*i);
就可以在vc下通过编译了
我想这是因为malloc所开辟的内存空间不足造成的错误

14楼

把buffer = (int*) malloc (i+1);改成 buffer = (int*)malloc (sizeof(n)*i);
就可以在vc下通过编译了
我想这是因为malloc所开辟的内存空间不足造成的错误

221.201.2.*

15楼

buffer = (int **) malloc (i+1);
61.151.239.*

16楼

老兄,你要创建一个数组当然要分配(int)*i的空间了,你只分配i的空间怎么够啊, 换为(int*) malloc (sizeof(int)*i)就OK!

17楼

搂主 你那个buffer = (int*) malloc (i+1); 
你认为分配了多少内存,我可以明确地告诉你 分配了(i+1)byte

如果你是要分配 i 个 int 
那就是 (i*sizeof(int))

基础啊!

18楼

hey thanks! i got the same problem and now i'v handled it~

19楼

如L17所示,呵呵。

20楼

看了17L的 才明白~~~

"How long do you want the string? "


这句话越看越别扭 呵呵~~~

应该是 "How long do you want the string is? "

21楼

sizeof( int )* (i + 1)
119.118.236.*

22楼

#include <stdio.h>
#include <stdlib.h>

int main ()
{
 int i,n;
 int * buffer;

 printf ("How long do you want the string? ");
 scanf ("%d", &i);

 buffer = (int*) malloc (i);
 if (buffer==NULL) exit (1);

 for (n=0; n<i; n++)
 buffer[n]=n+1;

 for (n=0; n<i; n++)
 printf ("Random string: %d\n",buffer[n]);
 return(0);
 free (buffer);

先把函数做完再free,这样就可以了。

23楼

细心问题 提醒自己注意

发表回复

内 容:
用户名:
  
©2010 Baidu 贴吧协议  意见反馈