473,378 Members | 1,555 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,378 software developers and data experts.

Fix your FAQ

I came across in clc++ this by chance:

"There is no language construct for dynamically allocating
multidimensional arrays. See the comp.lang.c FAQ question 6.16 and
related questions:

http://www.eskimo.com/~scs/C-faq/q6.16.html

(Substitute new for malloc appropriately)
--
Derrick Coetzee
I grant this newsgroup posting into the public domain. I disclaim all
express or implied warranty and all liability. I am not a professional. "

-----------------------------------------------------------------------

My answer:


"Derrick Coetzee wrote:
JKop wrote:
int (&on_the_heap)[2][3] = *new int[2][3];
There is no language construct for dynamically allocating

multidimensional arrays.

What?


See the comp.lang.c FAQ question 6.16 and related questions:

http://www.eskimo.com/~scs/C-faq/q6.16.html


It is C++ here, not C. But I just checked that FAQ. Who wrote that CRAP?

Even the casts it has in malloc are not needed in C!
In any case in C it can be done:
#include <stdlib.h>

/* ... */

int (*p)[3]=malloc(2*sizeof(*p));

/* ... */

free(p);"

Fix your FAQ!


Regards,

Ioannis Vranos

http://www23.brinkster.com/noicys
Nov 14 '05 #1
7 1202
Tweaked to display appropriately to all newsreaders:
I came across in clc++ this by chance:

"There is no language construct for dynamically allocating
multidimensional arrays. See the comp.lang.c FAQ question 6.16 and
related questions:

http://www.eskimo.com/~scs/C-faq/q6.16.html

(Substitute new for malloc appropriately)
Derrick Coetzee
I grant this newsgroup posting into the public domain. I disclaim all
express or implied warranty and all liability. I am not a professional. "

================================================== =====================

My answer:


"Derrick Coetzee wrote:
JKop wrote:
int (&on_the_heap)[2][3] = *new int[2][3];
There is no language construct for dynamically allocating

multidimensional arrays.

What?


See the comp.lang.c FAQ question 6.16 and related questions:

http://www.eskimo.com/~scs/C-faq/q6.16.html


It is C++ here, not C. But I just checked that FAQ. Who wrote that CRAP?

Even the casts it has in malloc are not needed in C!
In any case in C it can be done:
#include <stdlib.h>

/* ... */

int (*p)[3]=malloc(2*sizeof(*p));

/* ... */

free(p);"

Fix your FAQ!


Regards,

Ioannis Vranos

http://www23.brinkster.com/noicys
Nov 14 '05 #2

On Sat, 4 Sep 2004, Ioannis Vranos wrote:

http://www.eskimo.com/~scs/C-faq/q6.16.html [big snip; next bit from c.l.c++] It is C++ here, not C. But I just checked that FAQ. Who wrote that CRAP?

Even the casts it has in malloc are not needed in C!
Yes, the FAQ uses casts a lot. I have no idea why. I think the
question "Why does the FAQ use casts on malloc?" /is/ a Frequently
Asked Question in this newsgroup, and I'm sure Steve Summit has posted
some reason or other for it, but I don't remember what the answer was.
I think if the FAQ isn't going to be updated for C89, it at least
ought to add a new question and answer: "Why does the FAQ use casts
on malloc?"
In any case in C it can be done:

#include <stdlib.h>

int (*p)[3]=malloc(2*sizeof(*p));
Yes, of course. This is exactly the code given in example 4 in
the FAQ (up to a renaming of variables). The problem is that this
method can't be used to dynamically allocate both dimensions of an
array---only the '2' dimension is allowed to vary at runtime in your
example. (The FAQ explains this, too.) I think

int (*p)[y] = malloc(x*sizeof *p);

is still illegal even in C99, but I have no C&V to back that up.
Maybe C99 did change this.
Fix your FAQ!


The only problem is the malloc-casting, and that's a known bug
(feature?) of the FAQ. There's nothing wrong with the content of
that FAQ answer itself.

HTH,
-Arthur
Nov 14 '05 #3

"Arthur J. O'Dwyer" <aj*@nospam.andrew.cmu.edu> wrote
int (*p)[3]=malloc(2*sizeof(*p));


Yes, of course. This is exactly the code given in example 4 in
the FAQ (up to a renaming of variables). The problem is that this
method can't be used to dynamically allocate both dimensions of an
array---only the '2' dimension is allowed to vary at runtime in your
example. (The FAQ explains this, too.) I think

The other problem is that the syntax is so convoluted, and the construct so
rarely used, that the average programmer cannot be expected to use it.
Nov 14 '05 #4
In article <news:Pi**********************************@unix42. andrew.cmu.edu>
Arthur J. O'Dwyer <aj*@nospam.andrew.cmu.edu> wrote:
Yes, the FAQ uses casts a lot. I have no idea why.
The FAQ predates ANSI C89 -- or at least, widespread existence
of same (much of the text in the FAQ dates back to 1991 or so,
I believe, while C89 compilers were not really common until 1994).

Nonetheless:
... and I'm sure Steve Summit has posted
some reason or other for it, but I don't remember what the answer was.


The answer was "already fixed in the text and book version, but
the HTML version is behind". The monthly-posted-version no longer
casts malloc().
--
In-Real-Life: Chris Torek, Wind River Systems
Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
email: forget about it http://web.torek.net/torek/index.html
Reading email is like searching for food in the garbage, thanks to spammers.
Nov 14 '05 #5
Arthur J. O'Dwyer wrote:
Yes, the FAQ uses casts a lot. I have no idea why. I think the
question "Why does the FAQ use casts on malloc?" /is/ a Frequently
Asked Question in this newsgroup, and I'm sure Steve Summit has posted
some reason or other for it, but I don't remember what the answer was.
I think if the FAQ isn't going to be updated for C89, it at least
ought to add a new question and answer: "Why does the FAQ use casts
on malloc?"
In any case in C it can be done:

#include <stdlib.h>

int (*p)[3]=malloc(2*sizeof(*p));

Yes, of course. This is exactly the code given in example 4 in
the FAQ (up to a renaming of variables). The problem is that this
method can't be used to dynamically allocate both dimensions of an
array---only the '2' dimension is allowed to vary at runtime in your
example. (The FAQ explains this, too.) I think


Yes you are right, in this case ** must be used.


Regards,

Ioannis Vranos

http://www23.brinkster.com/noicys
Nov 14 '05 #6
Malcolm wrote:
int (*p)[3]=malloc(2*sizeof(*p));

The other problem is that the syntax is so convoluted, and the construct so
rarely used, that the average programmer cannot be expected to use it.


That can be simplified:
typedef int ThreeDim[3];

ThreeDim *p=malloc(2*sizeof(*p));

( or ThreeDim *p=malloc(2*sizeof(ThreeDim)); )


Regards,

Ioannis Vranos

http://www23.brinkster.com/noicys
Nov 14 '05 #7
In <ch***********@ulysses.noc.ntua.gr> Ioannis Vranos <iv*@guesswh.at.grad.com> writes:
It is C++ here, not C. But I just checked that FAQ. Who wrote that CRAP?
Someone who, unlike you, knew what he was talking about.
Even the casts it has in malloc are not needed in C!
There are no such casts in the official version of the c.l.c FAQ.
In any case in C it can be done:
#include <stdlib.h>

/* ... */

int (*p)[3]=malloc(2*sizeof(*p));

/* ... */

free(p);"

Fix your FAQ!


As soon as you show us a solution where BOTH dimensions are not known
at compile time. BTW, your method is also described by 6.16:

Yet another option is to use pointers to arrays:

int (*array4)[NCOLUMNS] = malloc(nrows * sizeof(*array4));

but the syntax starts getting horrific and at most one dimension
may be specified at run time.

So, please read the text *before* commenting it! Yes, I know I'm asking
too much from you...

Dan
--
Dan Pop
DESY Zeuthen, RZ group
Email: Da*****@ifh.de
Nov 14 '05 #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: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
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: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
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:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...

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.