全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2317
推到 Plurk!
推到 Facebook!

請問呼叫的程式執行完時,borlndmm.dll為何會發生錯誤?

答題得分者是:aftcast
a29375943
一般會員


發表:1
回覆:2
積分:0
註冊:2008-06-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-29 19:53:34 IP:140.125.xxx.xxx 訂閱

[code cpp]
char *buff=new char;
strcpy(buff,getcwd(NULL,256));
AnsiString Sbuff=buff;


STARTUPINFO si; //等待.exe完成後,再秀Message,保證程式執行完
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb=sizeof(si);
ZeroMemory(&pi, sizeof(pi));

AnsiString para = "vector.exe train " Sbuff "\\user"; //處理外面程式


if(!CreateProcess(NULL,para.c_str() ,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
ShowMessage("CreateProcess failed!" IntToStr(GetLastError()));
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
[/code]
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-09-30 03:11:42 IP:59.115.xxx.xxx 訂閱
你的第一行就錯誤了!

char *buff=new char;
/*
上面是新手經常犯的錯誤! 這樣只會配一個byte(字元)大小的空間
等下面copy字串進去時就會出現錯誤,因為不夠放
*/
char *buff= new char[256]; //這樣才正確! 配了256個byte字元來供copy進去
ZeroMemory(buff,256); //配合這行更精準,不然有可能會出問題


剛又看了一下你的程式碼,發現你的用法太轉彎且不夠好。其實你開始的三行用一行就可以,即
AnsiString Sbuff = getcwd(NULL,256);

但這樣不夠好,因為有memory垃坄在裡面,好一點的寫法是
char *cptr;
cptr = getcwd(NULL,256);
AnsiString Sbuff = cptr;
........
.......
delete [] cptr; //釋放路徑字串的記憶體
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2008-09-30 03:17:43, 註解 加ZeroMemory‧
aftcast 重新編輯於 2008-09-30 03:43:13, 註解 加入另一解法‧
a29375943
一般會員


發表:1
回覆:2
積分:0
註冊:2008-06-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-09-30 14:20:22 IP:140.125.xxx.xxx 訂閱
結果:
使用以下方法,就不會錯誤了!
多謝提供我好的程式寫法。

==================引 用 aftcast 文 章===================
但這樣不夠好,因為有memory垃坄在裡面,好一點的寫法是
char *cptr;
cptr = getcwd(NULL,256);
AnsiString Sbuff = cptr;
........
.......
delete [] cptr; //釋放路徑字串的記憶體
系統時間:2024-04-27 0:34:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!