- 在线时间
- 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>2 n/ C; X2 ?: P1 g0 j
< >alloca:</P>
5 I! W p A1 s& m# H0 r4 F8 `% P; |< >Allocates temporary stack space.</P>+ h5 U) W' z9 P9 M' P1 P
< >alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>
; M: V2 t: ]' g< >malloc:</P> G& U: G; D9 O) K9 K
< >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>
9 P; Y- z+ c6 q. T, B z9 h: A< >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>4 C# M# Q& {3 W, \8 G. z( d
5 x$ }& k- L: Q2 j' |1 z< >以下是改后的代码</P>
! v; G" ^3 k3 w& y5 e1 F* |: |& v# C< >//---------------------------------------------------------------------------</P>+ V/ A$ T. N7 Y8 q
< >#include <vcl.h>0 Z4 u! G8 Y; ~: A ^. a f
#pragma hdrstop</P>% F3 {' _( H, `6 g& b& }* \4 T
< >#include "Unit1.h"
) M1 r) M( k' S" K( x5 h#include <fstream.h>
. O/ z+ h0 C6 u#include <dir.h>& g$ ^1 e9 @. v0 v! W, c8 b6 {
#include <sys\stat.h>
+ N+ u) V8 i. C+ D' N2 Q' b#include <malloc.h>
2 M% K9 C" L1 Q//---------------------------------------------------------------------------
/ l5 E% b/ [- _#pragma package(smart_init)6 U. M# C: ^ i/ ^% _8 p7 F* M
#pragma resource "*.dfm"# _# _4 @0 x2 g
TForm1 *Form1;+ o: [& T* h7 W# s; o1 }7 l' R: B" h. D
unsigned char *BIN_Byte;
* z6 Y5 K; r0 L* I long BIN_Byte_Len;
9 y. ~% m3 @4 C9 k" j# R//---------------------------------------------------------------------------
% p+ T2 E* u& K6 N0 D2 J+ y* e__fastcall TForm1::TForm1(TComponent* Owner)
0 ~+ t+ }6 m0 b7 `) K. [* L1 g) a : TForm(Owner)% Z( Z6 \! i" g, u
{
5 S; e9 v# x7 _: x9 E1 H% R) G( i0 v}. z% U( M9 V3 O
//---------------------------------------------------------------------------, {& s% v$ |3 ^+ F& Q" f
void __fastcall TForm1::Button1Click(TObject *Sender)
3 n/ N8 w- a6 d( X! Z" E{/ K) L$ Q+ R6 Z* _; h, ]
char sPath[MAXPATH];$ ^6 b" o$ T. a) V5 k/ }* U- ~
struct stat statbuf;8 _# I6 I5 _$ Z2 E2 o9 P, x1 J
FILE *stream;</P>
' a3 P/ I: x8 } P- R% A4 q< > getcwd(sPath,sizeof(sPath));2 M+ M" O# `+ |) f& E8 C5 o E
OpenDialog1->InitialDir=sPath;
) H4 k3 c" X' @ OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
8 u: V2 z; K: \2 m. I3 S+ N OpenDialog1->FileName="fileFrom.BIN";- {% W' f% ?- R8 T* i0 M
if(OpenDialog1->Execute())
5 E8 G* Y' X; K {$ L1 p+ ?' a2 v
strcpy(sPath,OpenDialog1->FileName.c_str());+ M1 J7 S+ N0 K( s/ V
stream=fopen(sPath,"rb");
# D5 `& k! D+ Z5 ^, y, N( v3 M( ], ~ fstat(fileno(stream),&statbuf);- o7 e* `& m! T
BIN_Byte_Len=statbuf.st_size;
$ d$ v" u; G! K' Z BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);
, m0 h, G2 H0 u3 u+ X for(int i=0;i<BIN_Byte_Len;i++)
% |( g! B* f0 V& q fscanf(stream,"%c",&BIN_Byte); //read file
T9 O# j& o, q8 P7 e7 E: ` fclose(stream);% a# l$ [( k. u" l8 V
}
! |& o- @) T0 k" j1 B! ~}3 Q4 q' a) A0 E: D. e' ]9 e# E
//---------------------------------------------------------------------------
# Y5 c) q- @6 v6 Uvoid __fastcall TForm1::Button2Click(TObject *Sender)# F0 p1 r: w4 ?0 {. H4 |
{
2 l( k4 n; z* Y o, g# y char sPath[MAXPATH];
1 |3 d1 p, p# j3 C0 v FILE *stream;# I# m7 E3 N* }# A$ ~" H
getcwd(sPath,sizeof(sPath));//App.Path
. ?) S9 E$ Q8 i+ C* f; m( L strcat(sPath,"\\");
: v0 N, S' h9 U SaveDialog1->InitialDir = sPath;( f# r* T6 v8 Y2 s
SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*"; E( z! ~8 ~# r
SaveDialog1->FileName="fileTo.BIN";
9 M T" g2 Z; Q' @ if(SaveDialog1->Execute())7 R) }! X9 g* C, u! }# p5 _
{
# }- _$ P1 i9 P+ ? strcpy(sPath , SaveDialog1->FileName.c_str());
3 Y2 r. v6 o# f( W, G stream=fopen(sPath,"wb");
' N4 Z& G% R- O# j for(int i=0;i<BIN_Byte_Len;i++)
. `+ B2 ~: W8 ]" C, u% A* X! J fprintf(stream,"%c",BIN_Byte); //save file
/ ]# ` u+ e2 P; L& t6 K fclose(stream);
! X5 K4 O& D- ]' y& H" z: Y }. \5 {0 q& _/ {. Z; s- A" k( N
free(BIN_Byte);
- k/ V- s/ A' [/ @6 U' {}
$ ]. b2 f0 l& U, m9 R//---------------------------------------------------------------------------$ n2 H# {( A4 J8 [
void __fastcall TForm1::FormDestroy(TObject *Sender)) B9 m/ e+ ?: W9 ~9 q5 ]
{
! C9 \0 B* g) z0 ?* w6 d. g if (BIN_Byte!=NULL)
; j" I4 J. C/ B' f1 {( s free(BIN_Byte);) @/ \% J h [- \( ?4 S
}* C) g3 F( f; G* Y5 Q0 V
//---------------------------------------------------------------------------
0 X A& t5 Z7 }* r- G</P>( @2 h* Z* R# U0 Q+ Z! R
< >free(sPath); free(stream);此两句也有问题。</P>
; I5 @: y+ V, B) j* j< >char sPath[MAXPATH];不需要释放;</P>" E3 E4 f) J L \1 Y1 Q
< >fclose(stream)已经起到free(stream)的作用</P>) {/ H7 P2 L2 a% G% X
[此贴子已经被作者于2004-6-15 15:16:40编辑过] |
|