- 在线时间
- 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>
3 v1 l0 I% ]/ V7 `< >alloca:</P>$ ]' d; B( I1 N' \4 j* A! k& S! R
< >Allocates temporary stack space.</P>
" K- [" J0 p1 n3 a' [' o< >alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>
, H) ~, V f% R2 F" j7 f- n# |< >malloc:</P>+ X( z; K- M) c# V5 u& {8 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>: A# y) N6 a# ^9 L( W2 @
< >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>
* A! z( o d v: B2 J2 `- k8 [/ f: b. I
< >以下是改后的代码</P>: |* G4 h6 D' E% C! Q
< >//---------------------------------------------------------------------------</P>% U: F1 ^1 o* ^9 W% e
< >#include <vcl.h>$ P) i+ W6 w/ B8 D
#pragma hdrstop</P>) \! V" F5 k2 n7 x; f D. Z; V! n
< >#include "Unit1.h"4 ? G+ r# t% W1 ^; X B
#include <fstream.h>
0 d/ E, r' E/ N#include <dir.h>
% C$ D. Y6 B8 x; x2 a#include <sys\stat.h>
" T* F9 ~$ o+ T1 s2 v$ Z#include <malloc.h>( T: y+ n b( R/ s0 l3 X
//---------------------------------------------------------------------------$ m$ M3 n) v8 A( j" p* D5 y) o2 I
#pragma package(smart_init)3 _& K: b' E9 [1 H
#pragma resource "*.dfm"
- h4 j! o v- _( N( u$ ?+ cTForm1 *Form1;
$ O9 i2 L5 @) f- ] unsigned char *BIN_Byte;4 c! o. Z0 X# U& o- Y
long BIN_Byte_Len;
6 S, B- {. N. z$ Y; q//---------------------------------------------------------------------------
: q% l+ X5 Y6 T+ \__fastcall TForm1::TForm1(TComponent* Owner)" F$ _: C& m" I0 V! P* H
: TForm(Owner)% k4 I$ r/ a- e5 O8 M$ |+ @
{' q) N% G" f# f3 z8 E- x; f* a
}$ [" b. E/ Z$ y; g/ N, s- B: H+ x
//---------------------------------------------------------------------------
e u# b0 i# [$ fvoid __fastcall TForm1::Button1Click(TObject *Sender)4 e9 f2 O8 v* m I8 b, P
{
; n: H9 ~" D0 `5 L5 a' r char sPath[MAXPATH];
* D* S* u, K: \: g. X8 P struct stat statbuf;
5 f" x0 N! |( D! b+ q" I* H FILE *stream;</P>
$ t: ?6 v0 c6 e3 _, U< > getcwd(sPath,sizeof(sPath));
2 s! U& c2 H) c+ W OpenDialog1->InitialDir=sPath; E, e+ {) t1 w
OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
1 C! b+ \) x9 ~, ^! ^ q, i OpenDialog1->FileName="fileFrom.BIN";1 s H% [% p# l0 T% p
if(OpenDialog1->Execute())
2 Z# B% T+ q/ F+ U& o {1 u' e/ v `- I
strcpy(sPath,OpenDialog1->FileName.c_str());; y3 t" R) V: ^ D/ }5 O+ b
stream=fopen(sPath,"rb"); f8 k( |8 h8 G* t! O: s" P
fstat(fileno(stream),&statbuf);
' }2 l" {$ ]6 F5 w. o o& |% L BIN_Byte_Len=statbuf.st_size;
. I' f" [+ m# v4 t BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);% h# y, {. `7 p
for(int i=0;i<BIN_Byte_Len;i++)1 y8 h) d; _$ c# x
fscanf(stream,"%c",&BIN_Byte); //read file
9 u o. c8 q. P# F1 x3 v fclose(stream);9 s( J: z4 r7 P: e3 H7 |
}; s* S1 \6 U: W6 o' x, h
}
' [5 [; K- v9 W0 F4 ]0 Z, P2 S" ?- i//---------------------------------------------------------------------------
6 x% x" u9 t' F+ I: ^void __fastcall TForm1::Button2Click(TObject *Sender)# x: X4 Y) e. T8 K6 `- ~ Q$ T
{$ Y$ p" A3 h$ W
char sPath[MAXPATH];
6 D( Z; U: D; Y FILE *stream;" N6 N8 ^! s- Q& t; p; |
getcwd(sPath,sizeof(sPath));//App.Path/ J) ^; W l: _1 m
strcat(sPath,"\\");
# S5 `/ J$ I5 A6 X SaveDialog1->InitialDir = sPath;; v% t4 O( {% Q/ [
SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";$ {( m% X4 C8 [! o! l# k
SaveDialog1->FileName="fileTo.BIN";7 {( \! q5 D5 S) d
if(SaveDialog1->Execute())) |6 v- q3 b( Y
{, r! C5 y* n- E- Z) Y* E
strcpy(sPath , SaveDialog1->FileName.c_str());; h" C! K# V! N
stream=fopen(sPath,"wb");! E) L I% q* }* j
for(int i=0;i<BIN_Byte_Len;i++)8 J! ]7 B' r; V4 ^6 y. X1 W3 f( {
fprintf(stream,"%c",BIN_Byte); //save file
8 C. k {5 s# |) X# m, J/ U fclose(stream);4 Z% N8 R# B5 \5 k; D
}- D3 X" d+ C, S2 W+ L- A
free(BIN_Byte);
& l0 o0 M' U- N& d}
7 ?* O0 i; ] U; s* p# `$ I* {//---------------------------------------------------------------------------
$ O; A; q& [. C5 S0 x. xvoid __fastcall TForm1::FormDestroy(TObject *Sender)5 n" G2 Z3 r; r& s: c
{/ h9 D$ h- l( @/ k
if (BIN_Byte!=NULL)
/ X9 o/ O6 J4 _+ ?5 s0 [- E& |0 @+ Z free(BIN_Byte);
2 U( X4 P+ s; x+ u4 Y}
& `. }% U$ i3 R) ]* D//---------------------------------------------------------------------------
4 ~, t& ?. g( \3 b0 Q</P>5 p- |) b: ?, |
< >free(sPath); free(stream);此两句也有问题。</P>
! L% f8 ] K1 Q4 Y: u0 B2 @# u< >char sPath[MAXPATH];不需要释放;</P>
1 F% F* a( P( ]: l0 ~ \. t< >fclose(stream)已经起到free(stream)的作用</P>
8 U& Z+ Z1 U2 X" }# ]* P! v( A! @[此贴子已经被作者于2004-6-15 15:16:40编辑过] |
|