当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

 ·友情赠分。。。。    »显示摘要«
    摘要: rt。。。 ......
    摘要: 我参考了某位大哥的代码,实现存入excel的功能,但是保存的路径是固定的,我想利用 savedialog控件,跳出保存路径对话框,但不知到filename应该如何加上去,请各位指教: procedure tform1.button2click(sender: tobject); var xlsfilename :string; eclapp,workbook :variant ; a_fi......


程序中声明了一个大数组,运行时报错:Segmentation fault ,如何解决

#include   <stdio.h>  
  #define   N   2000  
  int   main(void)    
  {    
  int   i,j;  
  float   D[N][N];  
  for(i=0;i<N;i++)  
  {  
  for(j=0;j<N;j++)  
  {  
  D[i][j]   =   0;  
  }  
  }  
  return   0;  
  }  
   
  gcc   -o   test   test.c   编译没问题,运行时出错:Segmentation   fault    
  报错是由于数组太大的缘故,不知如何解决,请教大虾!

NO.1   作者: louguoqiang

你把float   D[N][N]定义为函数内部的局部变量,它占用的是栈空间,而栈空间是有默认大小的限制的,数组太大会造成这个问题,建议你把float   D[N][N]放到main外面成为全局变量,或者用new来分配。

NO.2   作者: lyr311

对,数组元素太多会出现栈空间的溢出,编译的时候当然没问题了,栈空间的分配是在运行的时候分配的。解决问题的最好办法是进行堆内存分配,堆内存就很大,我记得有人曾经说过栈空间的大小只有K数量级,而堆空间的大小可以达到G的数量级,足够你用了。堆空间分配就是用new啊,用了之后要注意delete来释放哦

NO.3   作者: strikebone

建议你看一下堆分配的问题,

NO.4   作者: lyr311

我给你查了一下资料,二维数组的堆内存分配格式是这样的:  
  #include   <iostream.h>  
  void   main()  
  {  
  int   n,**p;  
  cin>>n;  
  p=new   int*[n];  
  for(int   i=0;i<n;i++)  
  p[i]=new   int[n];  
  for(i=0;i<n;i++)  
  delete   []   p[i];  
  delete   []   p;  
  }

NO.5   作者: jakeye

malloc()这个函数也是用来分配内存的。  
  释放用free函数

NO.6   作者: lyr311

有的,我见过三维数组的这种分配,具体的程序片段我回去给你找一找,下午给你答案

NO.7   作者: lyr311

/*   给三维数组lay[10][10][10]分配空间   */  
  /*******************3D   array   allocate**********************/  
            lay=(float***)malloc(10*sizeof(float**));  
            for(i=0;i<10;i++)  
            {  
                lay[i]=(float**)malloc(10*sizeof(float*));  
                for(j=0;j<10;j++)  
                lay[i][j]=(float*)malloc(10*sizeof(float));  
            }  
  释放空间  
  /********************free   3d   array***********************/  
            for(i=0;i<10;i++)  
            {  
                for(j=0;j<10;j++)  
                    {  
                        free(lay[i][j]);  
                    }  
                free(lay[i]);  
            }  
            free(lay);  
 

NO.8   作者: lyr311

给个一般一点的,给三维数组lay[10][20][30]分配空间及释放:  
   
  #include   <malloc.h>  
  void   main()  
  {  
            float   ***lay;  
            int   i,j;  
  /*******************3D   array   allocate**********************/  
            lay=(float***)malloc(10*sizeof(float**));  
            for(i=0;i<10;i++)  
            {  
                lay[i]=(float**)malloc(20*sizeof(float*));  
                 
                for(j=0;j<20;j++)  
                    {  
                        lay[i][j]=(float*)malloc(30*sizeof(float));  
                    }  
            }  
  /********************************************************/  
  /********************************************************/  
  /********************************************************/  
  /********************free   3d   array***********************/  
              for(i=0;i<10;i++)  
                    {  
                        for(j=0;j<20;j++)  
                            {  
                                free(lay[i][j]);  
                            }  
                        free(lay[i]);  
                    }  
            free(lay);  
  }  
 


    摘要: 我用sdk编写了一个对话框,上面放置了一个ip address control,在填写完ip地址后,想检索他们的值, 向该控件发送了ipm_getaddress message,但是我不知道最后一个参数怎么用, 程序如下: dword pdwaddr; hwnd hipctrl; hipctrl=getdlgitem(hdlg,idc_ipaddr);//成功 sendmessage(hi......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE