compile error about void*

G

George2

Hello everyone,


What is wrong with the code, I just want to allocate an array of 100
void* pointers. :)

Code:
int main()
{
	void** p;

	p = new (void*) [100];

	return 0;
}
d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) : error C2143: syntax error : missing ';' before '['
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C3409: empty attribute block is not allowed
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ']' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'


thanks in advance,
George
 
A

anon

George2 said:
Hello everyone,


What is wrong with the code, I just want to allocate an array of 100
void* pointers. :)

Code:
int main()
{
	void** p;

	p = new (void*) [100];

	return 0;
}
d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) : error C2143: syntax error : missing ';' before '['

It tells you whats wrong.
Try this instead:

int main()
{
void** p;
p = new void* [100];
return 0;
}
 
M

Michael DOUBEZ

George2 a écrit :
Hello everyone,


What is wrong with the code, I just want to allocate an array of 100
void* pointers. :)

Code:
int main()
{
	void** p;

	p = new (void*) [100];[/QUOTE]

p = new void*[100];
[QUOTE]
return 0;
}
d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) : error C2143: syntax error : missing ';' before '['
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C3409: empty attribute block is not allowed
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ']' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'


thanks in advance,
George
 
J

jalina

George2 a écrit :
Hello everyone,


What is wrong with the code, I just want to allocate an array of 100
void* pointers. :)

Code:
int main()
{
	void** p;

	p = new (void*) [100];

	return 0;
}
d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) : error C2143: syntax error : missing ';' before '['
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C3409: empty attribute block is not allowed
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ']' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before 'constant'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'
1>d:\visual studio 2008\projects\test_void1\test_void1\main.cpp(5) :
error C2143: syntax error : missing ';' before ']'


thanks in advance,
George

typedef void* PVOID;

int
main()
{
PVOID *p;
p = new PVOID[100];
return 0;
}
 
T

Tomás Ó hÉilidhe

George2:
p = new (void*) [100];


Where T is a type:

If you want an array of pointers then:

T*[num]

If you want a pointer to an array, then:

T(*)[num]
 
J

James Kanze

George2 a écrit :
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :)
Code:
int main()
{
void** p; 
p = new (void*) [100];[/QUOTE][/QUOTE]
[QUOTE]
p = new void*[100];[/QUOTE]

Or "p = new (void * [100]) ;".

The type specifier in a new expression has a very restricted
syntax.  In particular, it cannot contain parentheses unless it
is entirely surrounded by parentheses.

Note that the syntax "new (int*)[100]" would be legal syntax,
but doesn't do what you might expect, and will invoke undefined
behavior at run-time---it allocates a single int*, then uses it
as if it were a pointer to the first element of an array,
accessing the 101st element.  Of course, the resulting type of
the expression is int, so you will almost certainly get a type
error when you try to assign the results.
 
J

James Kanze

George2:
p = new (void*) [100];
Where T is a type:
If you want an array of pointers then:

If you want a pointer to an array, then:
T(*)[num]

Not in a new expression. In a new expression, you'd have to put
that in parentheses (i.e. "(T(*)[num])").

More generally, I don't think there's any context in the
language where "(void*)[100]" could be legal. If the [...] is
the subscript operator, then what precedes must be an expression
(and "(void*)" isn't a legal expression). And if the [...] is
meant to be part of a declaration, the only context in a
declaration where (void*) would be legal is as a list of
function parameters, and you can't declare a function to return
an array. (You can declare a function to return a pointer or a
reference to an array, but in this case, it would be something
like:
int (&f(void*))[100] ;
with an extra closing ) in the string.)
 
J

Jerry Coffin

Hello everyone,


What is wrong with the code, I just want to allocate an array of 100
void* pointers. :)

Code:
int main()
{
	void** p;

	p = new (void*) [100];

	return 0;
}

You've gotten a number of answers that show the problem with the syntax
you're using. None, however, has mentioned that there are usually better
ways of doing this in C++. If you really want to do this, something like
"std::vector<void *> p(100)" will do the job -- but an array (or vector)
of pointers to void sounds somewhat questionable in itself. If you're
doing something like writing your own memory allocator, this is likely
to make sense -- but for most code, a pointer to void (not to mention a
lot of pointers to void) tends to indicate a possible problem.
 
I

Ioannis Vranos

George2 said:
Hello everyone,


What is wrong with the code, I just want to allocate an array of 100
void* pointers. :)

Code:
int main()
{
	void** p;

	p = new (void*) [100];

	return 0;
}


Wrong syntax:


The correct way to do what you want is:

void **p= new void *[100];
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,020
Latest member
GenesisGai

Latest Threads

Top