468,512 Members | 1,396 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,512 developers. It's quick & easy.

compile error about void*

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

Expand|Select|Wrap|Line Numbers
  1. int main()
  2. {
  3. void** p;
  4.  
  5. p = new (void*) [100];
  6.  
  7. return 0;
  8. }
  9.  
>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
Jan 17 '08 #1
9 3458
void** p;
>
p = new (void*) [100];
Write this:
p = new void*[100];

You syntax: using a special new operator.
Jan 17 '08 #2
George2 a écrit :
Hello everyone,
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)

Expand|Select|Wrap|Line Numbers
  1. int main()
  2. {
  3.     void** p;
  4.     p = new (void*) [100];
Expand|Select|Wrap|Line Numbers
  1.  
  2. p = new void*[100];
  3.  
  4.         
  5.                 >
  6.     return 0;
  7. }
  8.  
  9.  
>
>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
Jan 17 '08 #3
George2 wrote:
Hello everyone,
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)

Expand|Select|Wrap|Line Numbers
  1. int main()
  2. {
  3.     void** p;
  4.     p = new (void*) [100];
  5.     return 0;
  6. }
  7.  
>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;
}
Jan 17 '08 #4
George2 a écrit :
Hello everyone,
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)

Expand|Select|Wrap|Line Numbers
  1. int main()
  2. {
  3.     void** p;
  4.     p = new (void*) [100];
  5.     return 0;
  6. }
  7.  
>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;
}

Jan 17 '08 #5
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]
--
Tomás Ó hÉilidhe
Jan 17 '08 #6
On Jan 17, 9:28 am, Michael DOUBEZ <michael.dou...@free.frwrote:
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];
p = new void*[100];
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.

--
James Kanze (GABI Software) email:ja*********@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Jan 18 '08 #7
On Jan 17, 2:58 pm, "Tomás Ó hÉilidhe" <t...@lavabit.comwrote:
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]
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.)

--
James Kanze (GABI Software) email:ja*********@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Jan 18 '08 #8
In article <852ad1fa-f151-4bb5-b2c6-802042120aa8
@m34g2000hsf.googlegroups.com>, ge*************@yahoo.com says...
Hello everyone,
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)

Expand|Select|Wrap|Line Numbers
  1. int main()
  2. {
  3.     void** p;
  4.     p = new (void*) [100];
  5.     return 0;
  6. }
  7.  
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.

--
Later,
Jerry.

The universe is a figment of its own imagination.
Jan 19 '08 #9
George2 wrote:
Hello everyone,
What is wrong with the code, I just want to allocate an array of 100
void* pointers. :-)

Expand|Select|Wrap|Line Numbers
  1. int main()
  2. {
  3.     void** p;
  4.     p = new (void*) [100];
  5.     return 0;
  6. }
  7.  

Wrong syntax:
The correct way to do what you want is:

void **p= new void *[100];
Jan 20 '08 #10

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

5 posts views Thread by xuatla | last post: by
8 posts views Thread by pavel.orehov | last post: by
10 posts views Thread by Chris LaJoie | last post: by
1 post views Thread by electrixnow | last post: by
1 post views Thread by Jonas Schneider | last post: by
2 posts views Thread by akhilesh.noida | last post: by
reply views Thread by NPC403 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.