banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix lập trình C: tìm lỗi cho hàm ?  XML
  [Question]   lập trình C: tìm lỗi cho hàm ? 13/06/2010 12:34:37 (+0700) | #1 | 213202
[Avatar]
panfider
Member

[Minus]    0    [Plus]
Joined: 12/05/2010 01:51:04
Messages: 448
Offline
[Profile] [PM] [Email]
mình tìm hiểu về C, thì gặp chút rắc rối. Khi viết hàm duplicate char *list[] thì có lỗi. Mã của hàm này như sau:
phần mảng các con trỏ liền kề với phần data. Có thể thấy rõ khi mình dùng hàm malloc
file test: http://piece-of-c.googlecode.com/files/demo.c
Code:
/*
   
*/
char **flatstr(char **list,int nmemb){
	int nrbyte=0,r=0;
	void *pt=NULL;
	int nr=nmemb;
	while(--nr){
	  int i=strlen(list[nr]);
	  nrbyte+=++i;
	}
	pt=malloc(/*header*/nmemb*(sizeof(char *)+1)+/*data*/nrbyte+1);
	arr[nmemb]=NULL; //terminate pointer
	/*
		setup pointer
		what we have here is array of pointer has shape:
			char *arr[nmemb]; //in header site
	*/
	nr=nmemb;
	char **arr=(char **)pt;
	int pos=nmemb*sizeof(char *)+sizeof(char *);
	while(--nr){
		arr[r]=(char*)(arr+pos);
		pos=pos+strlen(list[r]);pos++;
		r++;
	}
	/*now I copy*/
	nr=nmemb;
	r=0;
	while(--nr){
		strcpy(arr[r],list[r]);
		r++;
	}
	return arr;
}

bạn nào debug giùm mình chuơng trình này nha! smilie
[Unix] live free or die
[Up] [Print Copy]
  [Question]   lập trình C: tìm lỗi cho hàm ? 13/06/2010 22:09:03 (+0700) | #2 | 213232
[Avatar]
H3x4
Member

[Minus]    0    [Plus]
Joined: 02/04/2009 00:03:16
Messages: 242
Offline
[Profile] [PM]
Mình thấy code rối quá, đọc hơi khó hiểu! Mà mục đích của bạn chỉ là clone cái mảng 2 chiều list để ret thành cái mới thôi đúng không? Nếu vậy thì đâu cần phức tạp như vậy đâu nhỉ??
[Up] [Print Copy]
  [Question]   lập trình C: tìm lỗi cho hàm ? 16/06/2010 21:49:14 (+0700) | #3 | 213475
[Avatar]
panfider
Member

[Minus]    0    [Plus]
Joined: 12/05/2010 01:51:04
Messages: 448
Offline
[Profile] [PM] [Email]
ừ! đúng rùi. Nhưng chuơng trình chạy sai.
Mã không có comment what going to do nên hơi khó hiểu chung chung làm cái gì.
[Unix] live free or die
[Up] [Print Copy]
  [Question]   lập trình C: tìm lỗi cho hàm ? 20/06/2010 19:16:56 (+0700) | #4 | 213768
TQN
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 22:28:01
Messages: 888
Location: Biết làm chi ?
Offline
[Profile] [PM] [WWW] [Yahoo!]
Bó tay cậu này luôn, đi xin việc C, rồi đòi viết OS riêng, libc riêng, vậy mà lại quăng lên 1 cái hàm C như một đống rác, nhờ debug giùm. Ít nhất hàm quăng lên và file code của cậu phải được modify lại cho rõ ràng chứ, coding style thống nhất chứ, không có comment thì cậu comment vô, rồi phải build được chứ.
Chả lẽ cứ đi copy&paste, ăn cắp code mà không hiểu chút gì cả à, vậy thì làm sao build OS, libc riêng được ?????????????
[Up] [Print Copy]
  [Question]   lập trình C: tìm lỗi cho hàm ? 20/06/2010 19:45:29 (+0700) | #5 | 213772
StarGhost
Elite Member

[Minus]    0    [Plus]
Joined: 29/03/2005 20:34:22
Messages: 662
Location: The Queen
Offline
[Profile] [PM]
@panfider: mình nhớ là mình có gửi cho bạn một tài liệu về phong cách viết chương trình C. Ngoài ra, mình đề nghị bạn tìm cách cải thiện tiếng Anh của bản thân. Một chương trình + lỗi đơn giản thế này mà bạn không debug ra thì mình không hiểu độ tin cậy của các đoạn mã của bạn là được bao nhiêu.
Mind your thought.
[Up] [Print Copy]
  [Question]   lập trình C: tìm lỗi cho hàm ? 21/06/2010 10:26:55 (+0700) | #6 | 213806
[Avatar]
panfider
Member

[Minus]    0    [Plus]
Joined: 12/05/2010 01:51:04
Messages: 448
Offline
[Profile] [PM] [Email]
hiện giờ vẫn chưa Debug được. Nhưng StarGhost khó tính quá.
[Unix] live free or die
[Up] [Print Copy]
  [Question]   lập trình C: tìm lỗi cho hàm ? 21/06/2010 11:05:11 (+0700) | #7 | 213809
greintell
Member

[Minus]    0    [Plus]
Joined: 23/12/2009 03:14:44
Messages: 4
Offline
[Profile] [PM] [Yahoo!]
Commenting helps you organize your thoughts and keeps you in practice when you go into the real world.  
[Up] [Print Copy]
  [Question]   lập trình C: tìm lỗi cho hàm ? 21/06/2010 11:58:35 (+0700) | #8 | 213815
[Avatar]
H3x4
Member

[Minus]    0    [Plus]
Joined: 02/04/2009 00:03:16
Messages: 242
Offline
[Profile] [PM]

panfider wrote:
hiện giờ vẫn chưa Debug được. Nhưng StarGhost khó tính quá. 


Cái code trên là của bạn à? Nếu vậy thì chịu khó code lại cái khác cho dễ hiểu chút thì người khác mới đọc hiểu và giúp được. Tự nhiên bạn cầm một mớ bòng bong rồi kêu người khác gỡ giùm tui đi thì ai mà biết đường nào mà gỡ chứ nhỉ smilie
[Up] [Print Copy]
  [Question]   lập trình C: tìm lỗi cho hàm ? 21/06/2010 12:06:47 (+0700) | #9 | 213816
[Avatar]
panfider
Member

[Minus]    0    [Plus]
Joined: 12/05/2010 01:51:04
Messages: 448
Offline
[Profile] [PM] [Email]
thật khó cho bạn khi bạn không hiểu code đó.
Mình sẽ viết lại từ đầu OK,
[Unix] live free or die
[Up] [Print Copy]
  [Question]   lập trình C: tìm lỗi cho hàm ? 21/06/2010 12:11:42 (+0700) | #10 | 213817
[Avatar]
panfider
Member

[Minus]    0    [Plus]
Joined: 12/05/2010 01:51:04
Messages: 448
Offline
[Profile] [PM] [Email]
mô tả ý tưởng của code:
vì ta có một mảng các con trỏ, các con trỏ này chỉ đến String
nên nó hơi rời rạc trong bộ nhớ,
hàm của mình sẽ làm cho cho nó liên tục trong bộ nhớ
bằng cách ta sẽ malloc nguyên khối bao gồm 2 phần:
void *pt=malloc(/*header*/nmemb*(sizeof(char *)+1)+/*data*/nrbyte+1);

Ý tưởng xem ra không hay lắm, vì xem xét lại độ lợi không cao so với công sức viết và debug,
nên mình từ bỏ ý tưởng.
Thông cảm, làm phiền mọi người,
[Unix] live free or die
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|