473,406 Members | 2,217 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,406 software developers and data experts.

bug



/* begin port to c++ */

# ifdef __cplusplus
extern "C" {
# endif

int * get_an_int(void);
int * pass_pointer_triv(int *);
# ifdef __cplusplus
}
# endif

/* end port to c++ */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *rt, *qt;
qt = get_an_int();
rt = pass_pointer_triv(qt);
printf ("t is %d\n", *rt);
printf ("tja\n");
return 0;
}

int * get_an_int(void)
{
int t;
int * pt;
pt = malloc (sizeof*pt);
t = 41;
pt[0] = t;
return pt;
}

pass_pointer_triv(int *a)
{
int t;
t = *a;
printf("t is %d\n", t);
return a;
}
/* end source */
I believe that this source is one silly error away from being kosher c++.
My compiler tells me that the trivial pointer pass varies in level of
indirection, but to my eye, it all looks the same. I believe that my
compiler is correct. Grateful for any hints. furunculus
Jun 21 '06 #1
7 1743

"Your Uncle" <in*****@crippled.net> wrote in message
news:44***********************@news.usenetmonster. com...


/* begin port to c++ */

# ifdef __cplusplus
extern "C" {
# endif

int * get_an_int(void);
int * pass_pointer_triv(int *);
# ifdef __cplusplus
}
# endif

/* end port to c++ */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *rt, *qt;
qt = get_an_int();
rt = pass_pointer_triv(qt);
printf ("t is %d\n", *rt);
printf ("tja\n");
return 0;
}

int * get_an_int(void)
{
int t;
int * pt;
pt = malloc (sizeof*pt);
My compiler complains about this.
error C2440: '=' : cannot convert from 'void *' to 'int *'

Either typecast to int * or use new (preferred) instead. t = 41;
pt[0] = t;
return pt;
}

pass_pointer_triv(int *a)
You forgot the return type. Change this to
int* pass_pointer_triv(int *a)
and it compiles for me, except for the malloc error.
{
int t;
t = *a;
printf("t is %d\n", t);
return a;
}
/* end source */
I believe that this source is one silly error away from being kosher c++.
My compiler tells me that the trivial pointer pass varies in level of
indirection, but to my eye, it all looks the same. I believe that my
compiler is correct. Grateful for any hints. furunculus

Jun 21 '06 #2

"Jim Langston" <ta*******@rocketmail.com> wrote in message
news:3p***************@fe05.lga...

"Your Uncle" <in*****@crippled.net> wrote in message
news:44***********************@news.usenetmonster. com...


/* begin port to c++ */

# ifdef __cplusplus
extern "C" {
# endif

int * get_an_int(void);
int * pass_pointer_triv(int *);
# ifdef __cplusplus
}
# endif

/* end port to c++ */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *rt, *qt;
qt = get_an_int();
rt = pass_pointer_triv(qt);
printf ("t is %d\n", *rt);
printf ("tja\n");
return 0;
}

int * get_an_int(void)
{
int t;
int * pt;
pt = malloc (sizeof*pt);


My compiler complains about this.
error C2440: '=' : cannot convert from 'void *' to 'int *'

Either typecast to int * or use new (preferred) instead.

Please explain.
t = 41;
pt[0] = t;
return pt;
}

pass_pointer_triv(int *a)


You forgot the return type. Change this to
int* pass_pointer_triv(int *a)
and it compiles for me, except for the malloc error.

I think that's gonna get her going. Thanks for pretending like my problems
were your problems tonight. ciao, f
Jun 21 '06 #3

"Your Uncle" <in*****@crippled.net> wrote in message
news:44***********************@news.usenetmonster. com...

"Jim Langston" <ta*******@rocketmail.com> wrote in message
news:3p***************@fe05.lga...

"Your Uncle" <in*****@crippled.net> wrote in message
news:44***********************@news.usenetmonster. com...


/* begin port to c++ */

# ifdef __cplusplus
extern "C" {
# endif

int * get_an_int(void);
int * pass_pointer_triv(int *);
# ifdef __cplusplus
}
# endif

/* end port to c++ */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *rt, *qt;
qt = get_an_int();
rt = pass_pointer_triv(qt);
printf ("t is %d\n", *rt);
printf ("tja\n");
return 0;
}

int * get_an_int(void)
{
int t;
int * pt;
pt = malloc (sizeof*pt);
My compiler complains about this.
error C2440: '=' : cannot convert from 'void *' to 'int *'

Either typecast to int * or use new (preferred) instead.

Please explain.


malloc returns a void* (void pointer). If you use it in c++ you need to
typecast it to the proper type either with reinterpret_cast or a c-style
cast. Either of these work, the reinterpert_cast prefered.

pt = reinterpret_cast<int*>( malloc( sizeof *pt ) );
pt = (int*) malloc( sizeof *pt );

but prefered is using new.

int *pt = new int;

Then just use delete to get rid of the memory instead of free (which you use
with malloc, but you are missing in your code so you have a memory leak)

t = 41;
pt[0] = t;
return pt;
}

pass_pointer_triv(int *a)


You forgot the return type. Change this to
int* pass_pointer_triv(int *a)
and it compiles for me, except for the malloc error.

I think that's gonna get her going. Thanks for pretending like my
problems were your problems tonight. ciao, f

Jun 21 '06 #4

"Jim Langston" <ta*******@rocketmail.com> wrote in message
news:OJ***************@fe04.lga...

"Your Uncle" <in*****@crippled.net> wrote in message
news:44***********************@news.usenetmonster. com...

"Jim Langston" <ta*******@rocketmail.com> wrote in message
news:3p***************@fe05.lga...

"Your Uncle" <in*****@crippled.net> wrote in message
news:44***********************@news.usenetmonster. com...
Either typecast to int * or use new (preferred) instead.

Please explain.


malloc returns a void* (void pointer). If you use it in c++ you need to
typecast it to the proper type either with reinterpret_cast or a c-style
cast. Either of these work, the reinterpert_cast prefered.

pt = reinterpret_cast<int*>( malloc( sizeof *pt ) );
pt = (int*) malloc( sizeof *pt );

but prefered is using new.

int *pt = new int;

Then just use delete to get rid of the memory instead of free (which you
use with malloc, but you are missing in your code so you have a memory
leak)

4 bytes unaccounted for? With resources such as they are, I think Keith
Thompson needs to write 42 volumes on it.

/* hello1.cpp contibutors: usual suspects */
/* begin port to c++ */

# ifdef __cplusplus
extern "C" {
# endif

int * get_an_int(void);
int * pass_pointer_triv(int *);
# ifdef __cplusplus
}
# endif

/* end port to c++ */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *rt, *qt;
qt = get_an_int();
rt = pass_pointer_triv(qt);
printf ("t is %d\n", *rt);
printf ("tja\n");
return 0;
}

int * get_an_int(void)
{
int t;
int * pt;
pt = malloc (sizeof*pt);
t = 41;
pt[0] = t;
return pt;
}

int * pass_pointer_triv(int *a)
{
int t;
t = (*a) ++;
printf("t is %d\n", t);
return a;
/* shut it down */
Jun 21 '06 #5

"Your Uncle" <in*****@crippled.net> wrote in message
news:44***********************@news.usenetmonster. com...
Either typecast to int * or use new (preferred) instead.
Please explain.


malloc returns a void* (void pointer). If you use it in c++ you need to
typecast it to the proper type either with reinterpret_cast or a c-style
cast. Either of these work, the reinterpert_cast prefered.

pt = reinterpret_cast<int*>( malloc( sizeof *pt ) );
pt = (int*) malloc( sizeof *pt );

but prefered is using new.

int *pt = new int;

Then just use delete to get rid of the memory instead of free (which you
use with malloc, but you are missing in your code so you have a memory
leak)

4 bytes unaccounted for? With resources such as they are, I think Keith
Thompson needs to write 42 volumes on it.


Sarcasm?

You're free to ignore advice if you like, but then why come here asking for
help? You asked him to explain, and he did.
/* hello1.cpp contibutors: usual suspects */
/* begin port to c++ */

# ifdef __cplusplus
extern "C" {
# endif

int * get_an_int(void);
int * pass_pointer_triv(int *);
# ifdef __cplusplus
}
# endif

/* end port to c++ */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *rt, *qt;
qt = get_an_int();
rt = pass_pointer_triv(qt);
printf ("t is %d\n", *rt);
printf ("tja\n");
return 0;
}

int * get_an_int(void)
{
int t;
int * pt;
pt = malloc (sizeof*pt);
Speaking of ignoring advice... that still won't compile. Did you understand
the explanation you were given?

If you want "kosher" c++, you need to get rid of memory leaks.
t = 41;
pt[0] = t;
return pt;
}

int * pass_pointer_triv(int *a)
{
int t;
t = (*a) ++;
printf("t is %d\n", t);
return a;
/* shut it down */


?

Do you still have a question? It's not apparent exactly what you're
saying/asking in this latest response.

-Howard

Jun 21 '06 #6

"Howard" <al*****@hotmail.com> wrote in message
news:7K********************@bgtnsc05-news.ops.worldnet.att.net...

"Your Uncle" <in*****@crippled.net> wrote in message
news:44***********************@news.usenetmonster. com...
> Either typecast to int * or use new (preferred) instead.
Please explain.

malloc returns a void* (void pointer). If you use it in c++ you need to
typecast it to the proper type either with reinterpret_cast or a c-style
cast. Either of these work, the reinterpert_cast prefered.

pt = reinterpret_cast<int*>( malloc( sizeof *pt ) );
pt = (int*) malloc( sizeof *pt );

but prefered is using new.

int *pt = new int;

Then just use delete to get rid of the memory instead of free (which you
use with malloc, but you are missing in your code so you have a memory
leak)

4 bytes unaccounted for? With resources such as they are, I think Keith
Thompson needs to write 42 volumes on it.


Sarcasm?

You're free to ignore advice if you like, but then why come here asking
for help? You asked him to explain, and he did.

Yes, sarcasm. I ignore advice all the time. Pronouns usually refer to the
immediate antecedent.
Speaking of ignoring advice... that still won't compile. Did you
understand the explanation you were given? I get no errors, no warnings. Are you certain that it just doesn't link?

If you want "kosher" c++, you need to get rid of memory leaks. But, what if I WANT something to leak?
Do you still have a question? It's not apparent exactly what you're
saying/asking in this latest response.

I've exxagerated twice now since beginning to post here in clc++. The first
was when I intimated that I got a $260 ticket in Wisconsin. It was $230.
My other error was when I tried to quantify the size of this memory leak.
I'm still thinking about that one. I can't decide when I free it whether
I'm freeing just a pointer, or a pointer and an int. ciao, f
Jun 21 '06 #7

"Your Uncle" <in*****@crippled.net> wrote in message
news:44**********************@news.usenetmonster.c om...

"Howard" <al*****@hotmail.com> wrote in message
news:7K********************@bgtnsc05-news.ops.worldnet.att.net...

"Your Uncle" <in*****@crippled.net> wrote in message
news:44***********************@news.usenetmonster. com...

>> Either typecast to int * or use new (preferred) instead.
> Please explain.

malloc returns a void* (void pointer). If you use it in c++ you need
to typecast it to the proper type either with reinterpret_cast or a
c-style cast. Either of these work, the reinterpert_cast prefered.

pt = reinterpret_cast<int*>( malloc( sizeof *pt ) );
pt = (int*) malloc( sizeof *pt );

but prefered is using new.

int *pt = new int;

Then just use delete to get rid of the memory instead of free (which
you use with malloc, but you are missing in your code so you have a
memory leak)
4 bytes unaccounted for? With resources such as they are, I think Keith
Thompson needs to write 42 volumes on it.


Sarcasm?

You're free to ignore advice if you like, but then why come here asking
for help? You asked him to explain, and he did.

Yes, sarcasm. I ignore advice all the time. Pronouns usually refer to
the immediate antecedent.
Speaking of ignoring advice... that still won't compile. Did you
understand the explanation you were given?

I get no errors, no warnings. Are you certain that it just doesn't link?

If you want "kosher" c++, you need to get rid of memory leaks.

But, what if I WANT something to leak?
Do you still have a question? It's not apparent exactly what you're
saying/asking in this latest response.

I've exxagerated twice now since beginning to post here in clc++. The
first was when I intimated that I got a $260 ticket in Wisconsin. It was
$230. My other error was when I tried to quantify the size of this memory
leak. I'm still thinking about that one. I can't decide when I free it
whether I'm freeing just a pointer, or a pointer and an int. ciao, f


I would tell you, but then you would just come back with sarcasm. You're
one of the few I'm seriously considering ploinking.
Jun 23 '06 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: William C. White | last post by:
Does anyone know of a way to use PHP /w Authorize.net AIM without using cURL? Our website is hosted on a shared drive and the webhost company doesn't installed additional software (such as cURL)...
2
by: Albert Ahtenberg | last post by:
Hello, I don't know if it is only me but I was sure that header("Location:url") redirects the browser instantly to URL, or at least stops the execution of the code. But appearantely it continues...
3
by: James | last post by:
Hi, I have a form with 2 fields. 'A' 'B' The user completes one of the fields and the form is submitted. On the results page I want to run a query, but this will change subject to which...
0
by: Ollivier Robert | last post by:
Hello, I'm trying to link PHP with Oracle 9.2.0/OCI8 with gcc 3.2.3 on a Solaris9 system. The link succeeds but everytime I try to run php, I get a SEGV from inside the libcnltsh.so library. ...
1
by: Richard Galli | last post by:
I want viewers to compare state laws on a single subject. Imagine a three-column table with a drop-down box on the top. A viewer selects a state from the list, and that state's text fills the...
4
by: Albert Ahtenberg | last post by:
Hello, I have two questions. 1. When the user presses the back button and returns to a form he filled the form is reseted. How do I leave there the values he inserted? 2. When the...
1
by: inderjit S Gabrie | last post by:
Hi all Here is the scenerio ...is it possibly to do this... i am getting valid course dates output on to a web which i have designed ....all is okay so far , look at the following web url ...
2
by: Jack | last post by:
Hi All, What is the PHP equivilent of Oracle bind variables in a SQL statement, e.g. select x from y where z=:parameter Which in asp/jsp would be followed by some statements to bind a value...
3
by: Sandwick | last post by:
I am trying to change the size of a drawing so they are all 3x3. the script below is what i was trying to use to cut it in half ... I get errors. I can display the normal picture but not the...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.