delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2005/07/07/03:31:38

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
From: Martin Ambuhl <mambuhl AT earthlink DOT net>
User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317)
X-Accept-Language: en-us, en
MIME-Version: 1.0
Newsgroups: comp.os.msdos.djgpp
Subject: Re: pointers in Strucrure assignment problem
References: <1120713425 DOT 526371 DOT 222910 AT g47g2000cwa DOT googlegroups DOT com>
In-Reply-To: <1120713425.526371.222910@g47g2000cwa.googlegroups.com>
Lines: 48
Message-ID: <TG4ze.17390$pa3.15032@newsread2.news.atl.earthlink.net>
Date: Thu, 07 Jul 2005 07:18:11 GMT
NNTP-Posting-Host: 165.247.43.38
X-Complaints-To: abuse AT earthlink DOT net
X-Trace: newsread2.news.atl.earthlink.net 1120720691 165.247.43.38 (Thu, 07 Jul 2005 00:18:11 PDT)
NNTP-Posting-Date: Thu, 07 Jul 2005 00:18:11 PDT
Organization: EarthLink Inc. -- http://www.EarthLink.net
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

aveo wrote:
> Hi all,
> Output of following program is unexpected.
> It affecting all elements of LD insted of 0th element
> Plz help me out.
[...]
> typedef struct LineDate
> {
> 	unsigned char *LinePtr;
> 	int LineCount;
> }LD1;
> 
> LD1 LD[100];
> 
> void main(void)

main returns an int in a hosted environment for either C or C++.

> {
> 	int i;
> 	//Intitialize LineData Structure---->>>>>
> 	for(i=0;i<=99;i++)
> 	{


> 		LD[i].LinePtr = (char *)calloc( 100, sizeof(char) );

sizeof(char) is 1 by definition, and, if this is C, the cast serves only 
to mask the error of not #including <stdlib.h>.  You should also test 
for the success of calloc.

> 		LD[i].LinePtr="";

The second of these causes you to
1) lose the value returned by calloc
2) create a memory leak
3) assign LD[i].LinePtr to point to the string literal "",

Further, since you used calloc, the strings are set to be empty anyway, 
so the seconde line is pointless.

A more efficient approach is

#define STRSIZE 100

    if (!(LD[i].LinePtr = malloc(STRSIZE))) { /* handle error */ }
    *LD[i].LinePtr = 0;

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019