question from job interview

Aug 17, 2014 at 1:27pm
Write your question here.

1
2
3
4
5
6
  void func()
{int i;
int *pint=new int();
Do things
delete pint
}


what is the danger here?
find 2 ways to solve the problem?
Aug 17, 2014 at 1:56pm
It might not be modern c++, but there is no danger there.

What is the code behind Do things?
Aug 17, 2014 at 2:00pm
Smart pointers?

Aceix.
Aug 17, 2014 at 2:26pm
Q: what is the danger here? A: Not exception safe

Q: find 2 ways to solve the problem? A: There is only one good way to solve the problem.
1
2
3
4
5
6
7
void func()
{
    int i = 0 ; // automatic storage duration

    // Do things 

}

Aug 17, 2014 at 2:59pm
Do things is a regular code that doesn't contain any problem
Aug 17, 2014 at 3:07pm
Do things is a regular code that doesn't contain any problem

if this is true then "Do things" also checks if pint is valid ?.
if so then there is no "danger" other than uninitialized variable i

presumably "Do things" part has a good reason why pint must be a pointer, so function spends time to dinamicaly allocate plain int.

also delete pint in your posted exaple is invalid since there is a missing semicolon.

futer more your function may be written to be more readable by moving int i; one line bellow, and also shifting the body one tab to the right :)
Last edited on Aug 17, 2014 at 3:11pm
Aug 17, 2014 at 3:25pm
In addition to not being exception safe, it may leak memory if "do things" contains a return statement. Even if not, the code is fragile because someone might add a return statement in the figure, thus inadvertently causing a memory leak.

For a small object like an int, there's no good reason to allocate it on the heap and free it. It should be an automatic variable instead.
Aug 17, 2014 at 4:13pm
and if there is a retrun in th middle what can we do to sovle the problem
Last edited on Aug 17, 2014 at 4:21pm
Aug 17, 2014 at 4:36pm
and if there is a retrun in th middle what can we do to sovle the problem

In that case the code won't compile because of your typo Wakka wakka!. Seriously though, if there already IS a return in the middle of the "Do Something" code body, then that is where you would use some form of smart pointer such as Aceix suggested. If you are asked "what if someone adds one in the future?" then this is functionally the same as you're employer asking you "what if the person we assign this project to later is incompetent?". More often then not this won't be a question in the interview; if it is then you need to reconsider the kind of place that you are applying to.
Aug 17, 2014 at 5:18pm
and if there is a retrun in th middle what can we do to sovle the problem
unique_ptr<int> pint;
at this point you can put your finger in your ear and start singing marching songs knowing you don't have to care about memory management :D
Aug 17, 2014 at 6:23pm
> and if there is a retrun in th middle what can we do to sovle the problem

Repeat: For an int that is needed only for the duration of the function,

use automatic storage duration.
use automatic storage duration.
use automatic storage duration.
use automatic storage duration.

1
2
3
4
5
6
7
void func()
{
    int i = 0 ; // automatic storage duration

    // Do things 

}


Using a smart pointer for this is dumb.
Aug 17, 2014 at 6:28pm
+100 @ JLBorges.
Aug 17, 2014 at 6:40pm
closed account (z05DSL3A)
I've got a feeling that you should use automatic storage duration...not sure what gives me that feeling but it is the thing to do.
Aug 17, 2014 at 7:02pm
I want to start off by saying that I am not intentionally trying to be argumentative here, I guess this is more so for my own sake. But from the admittedly limited amount of code given, everything suggests that 'i' and 'pint' are two distinct and different variables and with out more information they should remain so. I would think that if 'pint' was intended to point at 'i', then it would be initialized to point at 'i' and it would not be allocated it's own space.

EDIT: Now if 'pint' where a reference in the original example, then I can see how you guys came to this conclusion.

Over all I think that this interview question is stupid and so open ended that any answer you could give would be wrong for lack of data. It doesn't filter out any ones ability to read what a section of code does as a whole; and in fact it's inclusion in the interview process seems designed to discourage candidates who would point this fact out. It looks like it wants to find people who can identify what individual lines of code do but that trait is useless without the former. It's like something a TA would slap together and hope you don't actually think about it. If this really is the kind of crap you guys were asked in your first interview then I don't know how you guys made it through it with out jumping across the table and punching someone in the brain.
Last edited on Aug 17, 2014 at 7:08pm
Aug 18, 2014 at 2:12am


1
2
what is the danger here?
find 2 ways to solve the problem?


I guess by danger you mean compiler warnings.

1
2
3
4
5
6
7
8
9
 void func()
{int i; //garbage value
int *pint=new int();
Do things
delete pint //missing ;
//*pint = NULL;
//incase if it is deleted again the program won't crash
}
Last edited on Aug 18, 2014 at 2:18am
Aug 18, 2014 at 7:23am
Its true that automatic storage would be the best here, but in the case of a pointer, a smart pointer is the best option.

@Gkneeus
*pint!=NULL, but pint=nullptr; just to promote good conventions.

Aceix.
Aug 18, 2014 at 11:42am
this interview question is stupid and so open ended that any answer you could give would be wrong for lack of data


We had a C++ test that contained several questions that were somewhat open-ended. The purpose was to see what sort of answers the candidate would give and do spark discussion during the interview itself. This question may have been intended similarly. However, I agree that it's poorly described.

An example from our test was "what is the difference between malloc() and new? There are many differences and we wanted to see what candidates came up with.

Also, the purpose of the test was not to see if you could "pass" the test. Rather, it was designed to see if you could demonstrate knowledge that more-or-less corresponded with the level of experience that you claimed on your resume. We told candidates this up front.
Topic archived. No new replies allowed.