- 在线时间
- 0 小时
- 最后登录
- 2006-4-1
- 注册时间
- 2004-6-7
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 61 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 19
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1
- 主题
- 0
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   14.74% 该用户从未签到
|
< >不知道你找出的问题在那儿,我判断是alloca和malloc的误用。c++中对指针(内存)的操作总是容易出错,这些系统函数的使用,最好先仔细看看help。</P>
& j7 e4 V% d, ~6 ]< >alloca:</P>
7 I. q0 Z7 i: }2 I+ {6 Y u$ T< >Allocates temporary stack space.</P>
% E. ~2 E8 ^2 l< >alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>3 ~- h. [* z& ?! e/ S
< >malloc:</P>
. G' X9 `& x/ n% \! b' c8 `< >malloc allocates a block of size bytes from the memory heap. It allows a program to allocate memory explicitly as it抯 needed, and in the exact amounts needed.</P>4 f/ l- U. v# @; D" U' ?0 A" h
< >Allocates main memory.The heap is used for dynamic allocation of variable-sized blocks of memory. Many data structures, for example, trees and lists, naturally employ heap memory allocation.</P>5 t/ ], r% _: X( b" g4 @! X
. W. \: B: L, Z( `% D< >以下是改后的代码</P>" a" R& ]/ `# a7 A K
< >//---------------------------------------------------------------------------</P>& d' N9 w2 G$ k ]) G
< >#include <vcl.h>" u" G1 y0 X5 P2 \
#pragma hdrstop</P>! Q/ I, p: ]; \, h0 |
< >#include "Unit1.h"% G0 @9 x7 V/ o1 j! M9 B
#include <fstream.h>
$ v* [- g* N" ?* f B. H#include <dir.h>8 S# s2 S( P! u! o- O
#include <sys\stat.h>
& Q V; t. T9 P$ ^#include <malloc.h>' T, B$ ]" J$ F
//---------------------------------------------------------------------------; w% U2 C9 r3 k6 ^& B. p S9 \
#pragma package(smart_init)
$ {2 { J/ _5 G0 @2 u" |; h#pragma resource "*.dfm"% [5 Q$ q9 |& s1 B
TForm1 *Form1;8 N& L2 k9 X/ i* d+ s$ ?/ _
unsigned char *BIN_Byte;" g7 E# D7 E" h2 [) s
long BIN_Byte_Len;$ E% V; I" P& y( P) r& u
//---------------------------------------------------------------------------( ?1 Q7 Y+ V$ m( u) Z9 W
__fastcall TForm1::TForm1(TComponent* Owner)+ i, R# S4 |: \' {
: TForm(Owner)
" T8 k1 z% x/ I7 w( s{! j9 L, Q3 b F* k, \
}
& j/ E- N. W% M- `& L//---------------------------------------------------------------------------' q- v9 L0 b" c, X! O" c" u( d
void __fastcall TForm1::Button1Click(TObject *Sender)
" J1 c- I; H- e2 B6 Y{; q4 ]$ I- o+ u4 t$ F% k
char sPath[MAXPATH];+ H: N d9 f; J4 L% z0 g
struct stat statbuf;/ J& L" \: \3 b( f8 F# J8 `+ X
FILE *stream;</P>, x7 O7 V* e/ T
< > getcwd(sPath,sizeof(sPath));
' P1 }1 a& x \/ r6 C z) \( _ OpenDialog1->InitialDir=sPath;
* I P' a& M$ Y4 A1 l/ r% _- V OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";0 q3 l( x" I+ E
OpenDialog1->FileName="fileFrom.BIN";
" r4 }, z1 H5 l if(OpenDialog1->Execute())' d. n. ]6 T2 ]7 Q5 E. Y5 @
{, X+ j, Z0 A" P6 B* f' p4 K
strcpy(sPath,OpenDialog1->FileName.c_str());
, X: R- O+ T3 u c1 Q9 t stream=fopen(sPath,"rb");
9 y8 Z9 p; S& f" x8 H+ p/ o fstat(fileno(stream),&statbuf);$ i6 S6 i; V3 l& d8 K
BIN_Byte_Len=statbuf.st_size;
8 n4 g) R3 S% k! l BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);
# C$ a# g5 Z- W; Z5 U2 `6 a1 O for(int i=0;i<BIN_Byte_Len;i++)$ G$ ]2 ^% I! {. L3 A
fscanf(stream,"%c",&BIN_Byte); //read file: v( \# E4 s# W: i
fclose(stream); E8 Y0 j7 a" ?& }8 n
}# q5 o( M0 F0 ]6 t" i
}
/ \6 z' R. u# h% n _" T: Y//---------------------------------------------------------------------------3 i7 f/ u& `6 c' m+ L! M
void __fastcall TForm1::Button2Click(TObject *Sender)9 _5 ?0 a. P9 C* }
{, q9 M+ q+ O) `4 y. y% S1 v
char sPath[MAXPATH];4 _; Z$ i% m! W+ w8 ]2 E/ C
FILE *stream;
3 H* u* O8 ~( Y' Z getcwd(sPath,sizeof(sPath));//App.Path
j( Y {1 S0 l3 g5 @$ K strcat(sPath,"\\");
: T& ]8 q8 c9 ]8 D, p# d3 D3 _ SaveDialog1->InitialDir = sPath;
8 ]9 `9 o" K, A- \. w! r( R SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
( t% F6 z3 }8 |" n+ R SaveDialog1->FileName="fileTo.BIN"; e' G8 T. |7 R* ?, Z+ A5 o
if(SaveDialog1->Execute())
: t5 s$ F" s7 p0 n, B% I' c: T {
- ~( S; p. M; c strcpy(sPath , SaveDialog1->FileName.c_str());
& F7 {& d/ [5 V% ^ stream=fopen(sPath,"wb");6 \4 ~" E3 O/ O3 P
for(int i=0;i<BIN_Byte_Len;i++)+ q" c, u8 T1 z; ]4 I
fprintf(stream,"%c",BIN_Byte); //save file% Z0 v- B+ G+ y, J
fclose(stream);
7 u+ _3 O& }9 _7 C; T0 k }
( H' |+ E z% H a free(BIN_Byte);/ }6 y/ |* \) k" q
}* B3 g: [, m, D1 Z5 k
//---------------------------------------------------------------------------! ~: ]( i% Z" a6 f) U* y
void __fastcall TForm1::FormDestroy(TObject *Sender)+ |" d/ P+ `4 P% U
{
6 G& o- v" k3 X; x% O if (BIN_Byte!=NULL)
- R* G# D9 }9 A free(BIN_Byte);4 X$ N! _- I1 ?7 h p# T# `" ]
}
! U! V T( a _3 D! Y//---------------------------------------------------------------------------
% ~; b8 U* I$ l5 I O9 k</P>
. p, Q2 u$ G# \8 T( s* N j< >free(sPath); free(stream);此两句也有问题。</P>; e, ~# u4 z8 b- X0 U( ^* s% x
< >char sPath[MAXPATH];不需要释放;</P>
2 U! }' a) }$ z( k* T< >fclose(stream)已经起到free(stream)的作用</P>/ ^7 c: [( k' g1 X1 T
[此贴子已经被作者于2004-6-15 15:16:40编辑过] |
|