Hi,
I'm trying to use a dynamic array but for some reason it won't work. This is
my code :
int *test;
int numElements = 2;
test = (int *) malloc (numElements * sizeof(int));
if (test= NULL) printf("Can't allocate\n"); // Nothing happens here
so it's ok I guess
test[0] = 10; // <- CRASH!
printf( "test= %d\n",test[0] );
I copied it from the internet and it seems that they all do it this way?
Then why won't this work? My computer sure has enough for 2 integers...
Greetings,
Rick 20 12707
Rick wrote: I'm trying to use a dynamic array but for some reason it won't work. This is my code :
int *test; int numElements = 2;
test = (int *) malloc (numElements * sizeof(int)); if (test= NULL) printf("Can't allocate\n"); // Nothing happens here
^
Hur, hur!
You want ==.
Jirka
"Rick" <as******@hotmail.com> wrote: Hi,
I'm trying to use a dynamic array but for some reason it won't work. This is my code :
It's certainly not, it won't even compile.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{ int *test; int numElements = 2;
test = (int *) malloc (numElements * sizeof(int));
^ spurious cast, you'd better write:
test = malloc ( numElements * sizeof *test );
if (test= NULL) printf("Can't allocate\n"); // Nothing happens here
^ you assign NULL to test here
so it's ok I guess
No, you want:
if ( test == NULL )
{
printf("Can't allocate\n");
return EXIT_FAILURE;
}
test[0] = 10; // <- CRASH!
It's not surprising for NULL[0] = 10; to crash. You invoked undefined
behaviour.
printf( "test= %d\n",test[0] );
return EXIT_SUCCESS;
}
I copied it from the internet and it seems that they all do it this way?
No, fortunately not.
Then why won't this work? My computer sure has enough for 2 integers...
See above.
HTH
Regards
--
Irrwahn
(ir*******@freenet.de)
Jirka Klaue wrote: Rick wrote:
I'm trying to use a dynamic array but for some reason it won't work. This is my code :
int *test; int numElements = 2;
test = (int *) malloc (numElements * sizeof(int)); if (test= NULL) printf("Can't allocate\n"); // Nothing happens here
^ Hur, hur!
You want ==.
To OP.
That's why many programmers prefer to write:
if (NULL==test) {
/* ... */
}
To catch the error at compile time.
e.j.s.
--
The white zone is for loading and unloading only.
(Frank Zappa)
Ok, ok, I quickly typed it over. ( s = NULL ) is stupid indeed but in the
real code there are really 2 == :) And no, although there's a bug it does
compile. But look, an exact copy now :
int *da;
int numElements = 2;
da = (int *) malloc (numElements * sizeof(int));
if (da== NULL) printf("damn\n");
da[0] = 10; // The same problem
printf( "test= %d\n",da[0] );
Also tried without the == null line, just for sure, but it doesn't work
neither. I also tried it without (int *)but it keeps crashing.
Greetings,
Rick
Rick wrote: Ok, ok, I quickly typed it over. ( s = NULL ) is stupid indeed but in the real code there are really 2 == :) And no, although there's a bug it does compile. But look, an exact copy now :
int *da; int numElements = 2;
da = (int *) malloc (numElements * sizeof(int)); if (da== NULL) printf("damn\n"); da[0] = 10; // The same problem printf( "test= %d\n",da[0] );
Also tried without the == null line, just for sure, but it doesn't work neither. I also tried it without (int *)but it keeps crashing.
You have a flaw. You should not simply print a message
if the allocation failed and then continue on as if it was
successful. You need and if-else or an exit.
Try this and see if this crashes:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *da;
int numElements = 2;
da = malloc(numElements * sizeof(int));
if (da == NULL) printf("damn\n");
else
{
da[0] = 10;
printf( "test= %d\n",da[0] );
free(da);
}
return 0;
}
--
Al Bowers
Tampa, Fl USA
mailto: xa******@myrapidsys.com (remove the x to send email) http://www.geocities.com/abowers822/
Very True, but it doesn't solve the problem...
Greetings,
Rick
"sellountos euripides" <se********@mech.upatras.gr> wrote in message
news:bn**********@nic.grnet.gr... if (test= NULL) printf("Can't allocate\n"); ^ Hur, hur!
You want ==.
To OP. That's why many programmers prefer to write: if (NULL==test) { /* ... */ } To catch the error at compile time.
I prefer to increase the warning level from my compiler, which also sets off
an alarm bell in this type of situation:
int i, j;
/* ... */
if (i = /* whoops! */ j) { /* ... */ }
Alex
Ow, Al, I tried you code (thanks for that) in the main but it still crashes.
What the heck is going on? Even my drunken brain can store 2 integers. It's
just a normal pc. Maybe it are some settings in the old Borland C++??
Greetings,
Rick
Wait! I talk too fast. It does work now, after including #include <stdlib.h>
as well. Are their more versions of malloc or something? The compiler didn't
say anything.
Thanks!
Rick
"Rick" <as******@hotmail.com> wrote: Ok, ok, I quickly typed it over. ( s = NULL ) is stupid indeed but in the real code there are really 2 == :) And no, although there's a bug it does compile. But look, an exact copy now :
int *da; int numElements = 2;
da = (int *) malloc (numElements * sizeof(int)); if (da== NULL) printf("damn\n"); da[0] = 10; // The same problem printf( "test= %d\n",da[0] );
Sorry, but your code confuses my compiler:
4: conflicting types for `da'
1: previous declaration of `da'
4: warning: implicit declaration of function `malloc'
4: warning: initialization makes integer from pointer without a cast
4: initializer element is not constant
4: warning: data definition has no type or storage class
5: parse error before "if"
6: warning: type defaults to `int' in declaration of `da'
6: conflicting types for `da'
4: previous declaration of `da'
6: invalid initializer
6: warning: data definition has no type or storage class
7: parse error before string constant
7: warning: type defaults to `int' in declaration of `printf'
7: warning: conflicting types for built-in function `printf'
7: warning: data definition has no type or storage class
Please post a compilable version of your code.
Regards
--
Irrwahn
(ir*******@freenet.de)
Strange you compiler doesn't take it. Well, maybe it's because of my very
old Borland version. But it's fixed now, the only thing I forgot the whole
time was including stdlib :)
Greetings,
Rick
"Rick" <as******@hotmail.com> wrote: Wait! I talk too fast. It does work now, after including #include <stdlib.h> as well. Are their more versions of malloc or something? The compiler didn't say anything.
You just dicovered the reasons why it's usually bad practice to cast the
return value of malloc (it may hide the fact that you forgot to include
stdlib.h), and why it's good practice to turn up the warning level of
your compiler to maxinmum and treat warnings as errors.
Regards
--
Irrwahn
(ir*******@freenet.de)
"Rick" <as******@hotmail.com> wrote: Strange you compiler doesn't take it. Well, maybe it's because of my very old Borland version. But it's fixed now, the only thing I forgot the whole time was including stdlib :)
Plus including stdio.h, plus wrapping your code in a main function, plus
casting the return value of malloc, plus failing to pump up your
compilers warning level.
Regards
--
Irrwahn
(ir*******@freenet.de)
Do you have magic powers? How do you know I forgot all that stuff? I only
gave a piece of the code, not the complete thing. Anyway, everybody thanks
for helping!
Greetings,
Rick
"Rick" <as******@hotmail.com> wrote: Do you have magic powers?
Not yet, but I've got an ACME Crystal Ball [TM]. ;-)
How do you know I forgot all that stuff? I only gave a piece of the code, not the complete thing.
That was the main (sic) problem.
Anyway, everybody thanks for helping!
You're welcome.
Regards
--
Irrwahn
(ir*******@freenet.de)
In <3f***********************@news.xs4all.nl> "Rick" <as******@hotmail.com> writes: Wait! I talk too fast. It does work now, after including #include <stdlib.h> as well. Are their more versions of malloc or something? The compiler didn't say anything.
You shot yourself in the foot, by casting the malloc call. Without the
cast, the compiler MUST emit a diagnostic, if you don't include <stdlib.h>
because malloc is implicitly declared as returning int, but used in a
pointer context.
The first rule of computer programming: know what you're doing.
The second rule of computer programming: know how to use your tools.
Actually, these rules apply to any human activity...
Compile these two programs and note the difference:
int main()
{
char *p = malloc(10);
return 0;
}
and
int main()
{
char *p = (char *)malloc(10);
return 0;
}
They're both equally broken (due to the lack of declaration for malloc),
but only the first one requires a diagnostic from the compiler.
The next exercise is to find out how to use your compiler so that even
the second program generates a diagnostic, because you're using a function
without declaring it. C89 allows this, but it is such an atrocious idea
that practically all compilers can warn about it, if you raise their
warning level high enough. You really don't want to use undeclared
functions in your programs and, if you have to declare them yourself,
make sure you use prototype declarations.
If the compiler can find your bugs, it is downright idiotic not to let it
do it for you.
Dan
--
Dan Pop
DESY Zeuthen, RZ group
Email: Da*****@ifh.de
Rick wrote: Do you have magic powers? How do you know I forgot all that stuff? I only gave a piece of the code, not the complete thing. Anyway, everybody thanks for helping!
Please quote a relevant portion of the post you are replying to.
Brian Rodenborn
On Wed, 29 Oct 2003 14:31:41 +0100, in comp.lang.c , "Rick"
<as******@hotmail.com> wrote: Wait! I talk too fast. It does work now, after including #include <stdlib.h> as well. Are their more versions of malloc or something? The compiler didn't say anything.
Rick, sorry about this, but I'm going to store your post for
perpetuity, as it a classic example of someone actually getting bitten
by the reason for NOT casting malloc.
--
Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>
CLC readme: <http://www.angelfire.com/ms3/bchambless0/welcome_to_clc.html>
----== Posted via Newsfeed.Com - Unlimited-Uncensored-Secure Usenet News==---- http://www.newsfeed.com The #1 Newsgroup Service in the World! >100,000 Newsgroups
---= 19 East/West-Coast Specialized Servers - Total Privacy via Encryption =---
On Wed, 29 Oct 2003 14:31:41 +0100, in comp.lang.c , "Rick"
<as******@hotmail.com> wrote: Wait! I talk too fast. It does work now, after including #include <stdlib.h> as well. Are their more versions of malloc or something?
There's only one version ,declared in stdlib.h.
The compiler didn't say anything.
Its not required to. Your cast silenced the only warning it could have
made, "implicit conversion from int to pointer". In the absence of a
proper prototype for a function, the compiler assumes that it returns
an int. DONT cast malloc in C code, for this very reason.
--
Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>
CLC readme: <http://www.angelfire.com/ms3/bchambless0/welcome_to_clc.html>
----== Posted via Newsfeed.Com - Unlimited-Uncensored-Secure Usenet News==---- http://www.newsfeed.com The #1 Newsgroup Service in the World! >100,000 Newsgroups
---= 19 East/West-Coast Specialized Servers - Total Privacy via Encryption =---
Rick wrote: Wait! I talk too fast. It does work now, after including #include <stdlib.h> as well.
#include <stdlib.h>, is part of the program code.
When you post code to this newsgroup,
try to post the smallest complete entire program
which exhibits your problem.
--
pete This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: meyousikmann |
last post by:
The following code just sets up and fills a dynamic array of integers.
#include <cstdlib>
int main()
{
int* intArray = NULL;
int count;
count = 20;
|
by: Scott Lyons |
last post by:
Hey all,
Can someone help me figure out how to pass a dynamic array into a function?
Its been giving me some trouble, and my textbook of course doesnt cover the
issue. Its probably something...
|
by: genc ymeri |
last post by:
Hi,
What can I use in C# for dynamic arrays ???? I have some records (struts in
..Net) and want to store them in a dynamic "arrays" or object list.
I noticed the in C# arrays' length can't be...
|
by: Peter Olcott |
last post by:
I need to know how to get the solution mentioned below to work. The
solution is from gbayles Jan 29 2001, 12:50 pm, link is provided below:
>...
|
by: learnfpga |
last post by:
Here is a little code I wrote to add the numbers input by the
user.....I was wondering if its possible to have the same functionality
without using dynamic arrays.....just curious.....
...
|
by: assgar |
last post by:
Hi
Developemnt on win2003 server. Final server will be linux
Apache,Mysql and PHP is being used.
I use 2 scripts(form and process).
The form displays multiple dynamic rows with chechboxs,...
|
by: hobbes992 |
last post by:
Howdy folks,
I've been working on a c project, compiling using gcc, and I've reached a problem. The assignment requires creation of a two-level directory file system. No files have to be added or...
|
by: KioKrofov |
last post by:
Hello,
I am trying to find out how Dynamic Arrays are actually stored in memory. Really, I want to know how Vectors are stored in memory, but I deduce they are stored the same way.
If you...
|
by: headware |
last post by:
Do dynamic arrays declared using ReDim have to be freed? I assume that
if it's an array of dynamically created objects (e.g.
Scripting.Dictionary), each one of those objects will have to be set
to...
|
by: Sunny |
last post by:
Hi,
Is there a way in javascript to create Dynamic arrays or arrays on
fly.
Something Like:
var "ptsgN"+sd = new Array();
Here sd is incrementing by 1.
I have lots of data that I am...
|
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,...
|
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...
|
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
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
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: 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...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
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...
| |