fgets problems


 
Thread Tools Search this Thread
Top Forums Programming fgets problems
# 15  
Old 02-20-2010
Quote:
Originally Posted by Corona688
Of all the faith-based initiatives Bush funded, faith-based software maintenance has to be the worst. Smilie Bottom line is, you don't know why it crashed, don't know why it stopped crashing, and don't know if the problem is truly solved yet or not. All we know is that something trashed some memory somewhere somehow. Time for a memory debugger.
I'm just saying that in these functions, the only memory I manage myself is in a single array, char line[]. All other memory management is done by the library. And since library-related memory troubles will be problems *within* the Pari stack rather than overflowing the Pari stack*, the particular tool recommended here seem powerless to help me.

What I would need is something that could help me debug memory use within the Pari stack.

* I recognize that you haven't seen the library code, so this you're going to have to trust... or not.

Quote:
Originally Posted by Corona688
All this odd stack rearranging makes me more and more suspicious of memory trashing, not less!
Agreed. It's error-prone, to be sure. The biggest problem (in my experience with this library) is leaving garbage behind, but I have had occasional problems of corrupted data -- say, moving the pointer too far so that some members of a live structure can be overwritten later.

Quote:
Originally Posted by Corona688
When it works perfectly it works perfectly, but one mistake and you're mangling your own stack frame. It could also be a disguised array-bounds problem, these macros are using hidden stack variables and writing beyond them could smash your stack too.
The testing behind the library code is quite solid; I'm not concerned about it going past the end of the stack or overwriting things in the 'valid data' portion. My code, on the other hand, is comparatively suspect: I could move the pointer to the wrong place, so that the (correct) library code would overwrite my data.

There are, as you suggest, several stack variables, but the only one that I use regularly is avma, the "available memory area" pointer.
# 16  
Old 02-20-2010
Memory related troubles within the pari stack will not cause inexplicable problems outside pari. To cause crashes in unrelated things, either the heap or the stack is getting mangled somewhere by something. Since this is clearly impossible, your program was never crashing and this thread does not exist, and you have no need of a memory debugger to check for problems that never existed.

Less sarcastically, 'garbage on the stack' won't crash stdio or anything else programmed sensibly. Every function call you make leaves garbage on the stack, pari's nothing remarkable in that respect. If you're getting segfaults in senseless places, either your stack's being corrupted, or your heap. (Or you're having hardware problems like memory errors.) A memory debugger -- or really, any debugger at all -- will be more useful than a thousand people staring at the 1% of your code you're willing to present. In the time we've spend arguing about it you could've tried lots of things.
# 17  
Old 02-20-2010
Quote:
Originally Posted by Corona688
Memory related troubles within the pari stack will not cause inexplicable problems outside pari. To cause crashes in unrelated things, either the heap or the stack is getting mangled somewhere by something.
Then the problem was never with memory.

Quote:
Originally Posted by Corona688
Less sarcastically, 'garbage on the stack' won't crash stdio or anything else programmed sensibly.
Of course. It is something I need to be concerned with, though -- most of my early programs with the library were unusable (crashed whenever run) by using up all of the stack.

Quote:
Originally Posted by Corona688
If you're getting segfaults in senseless places, either your stack's being corrupted, or your heap.
No, no segfaults -- not now, not before.
# 18  
Old 02-21-2010
Quote:
But the last read through fgets does *not* return NULL but causes an application-ending error.
It died from some signal in a senseless place. If not a segfault then what? You didn't say, so we picked the obvious one to happen in that manner, a segfault.
# 19  
Old 02-21-2010
Quote:
Originally Posted by Corona688
It died from some signal in a senseless place. If not a segfault then what? You didn't say, so we picked the obvious one to happen in that manner, a segfault.
Unfortunately I don't recall and it's fallen off the screen. Is there something analogous to .bash_history that keeps errors?
# 20  
Old 02-21-2010
Let me get this straight: you have a custom memory management library, and your code using that library crashes?

OK.

You need all the help you can get. But there's not much out there.

Your only hope is to do something like download a demo copy of Purify and use it. And then pray that you don't have any bugs in your custom library.

And good luck.

You're going to need it.

There's a reason why nobody writes their own memory management libraries. First off, the multiple libraries available for free on your OS of choice are almost certainly fast enough. If they're not, you're most likely doing something wrong, like an over-reliance on malloc()/free() and/or new/delete. And if the OS libaries truly aren't fast enough (and if you're not multithreaded on a massively parallel application, they ARE fast enough!), there are third-party memory management libraries available.

Go price something like Smartheap. Then calculate all the hours spent on your custom memory library and how much those hours cost. Want to bet Smartheap is cheaper? If you even need it in the first place.

There are probably literally thousands of man-years invested by many absolutely brilliant computer scientists and programmers in all the memory-management libraries available in today's operating systems. And those products have been thoroughly tested - for literally decades.

You want a car analogy? Writing your own memory management library is like chiseling out a stone wheel for a sports car. The only reason to do it is for the sake of doing it - as a hobby or academic learning experience. Because there's no way you can duplicate the engineering history behind a "normal" wheel. Even if you do manage to chisel out a wheel that manages to outperform a "normal" wheel in a tiny operating range, you'll never really know how durable your wheel is because it's totally untested.
# 21  
Old 02-21-2010
Quote:
Originally Posted by CRGreathouse
Unfortunately I don't recall
So you have no idea why code using your own personally-developed stack-modifier was crashing or how, or why it stopped, but are 100% certain it wasn't a segfault despite it having all the hallmarks of one because that would be inconvenient. Faith-based software-maintenance, I tell you. Smilie

Oh well, I'm done arguing until you have new data or questions. You know our positions already. Like achenle says, good luck, you're going to need it. (Though I thoroughly disagree that there's no way to improve on modern memory management!)
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

while and do problems

Any ideas how to clear this error as it seems I dont understand if,do,while and els commands #!/bin/ksh set -x print "This script creates test messages" print "Please enter test case name" read testcasename echo $testcasename skipfield=Y while print "Do you want to skip this field... (4 Replies)
Discussion started by: andrew.p.mcderm
4 Replies

2. Programming

fgets read file line with "\n" inside

Hi, I have a string like this, char str ="This, a sample string.\\nThis is the second line, \\n \\n, we will have one blank line"; if I want to use strtok() to seperate the string, which token should I use? I tried "\n", "\\n", either not working. peter (1 Reply)
Discussion started by: laopi
1 Replies

3. Programming

fgets problems newline

hello, i'm trying to write a C-program that reads a file line by line. (and searches each line for a given string) This file is an special ASCII-database-file, with a lot of entries. I checked the line with most length, and it was about 4000 characters. With google i found several... (4 Replies)
Discussion started by: p1cm1n
4 Replies

4. UNIX for Dummies Questions & Answers

Problems with using less

Hello, I am having problems with using less on Linux version 2.6.18-92.1.17.el5 (brewbuilder@hs20-bc1-7.build.redhat.com) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)). I am using csh but have the same problems on bash. If I pipe something to less it works perfectly i.e. cat file | less... (9 Replies)
Discussion started by: z1dane
9 Replies

5. Programming

[C] fgets problem with SIGINT singlal!!!

Hi all, I have this method to read a string from a STDIN: void readLine(char* inputBuffer){ fgets (inputBuffer, MAX_LINE, stdin); fflush(stdin); /* remove '\n' char from string */ if(strlen(inputBuffer) != 0) inputBuffer = '\0'; } All work fine but if i... (1 Reply)
Discussion started by: hurricane86
1 Replies

6. Programming

Question about NULL Character & fgets()

Assume client send the message " Hello ", i get output such as Sent mesg: hello Bytes Sent to Client: 6 bytes_received = recv(clientSockD, data, MAX_DATA, 0); if(bytes_received) { send(clientSockD, data, bytes_received, 0); data = '\0';... (2 Replies)
Discussion started by: f.ben.isaac
2 Replies

7. Programming

Problem with fgets and rewind function ..

Hello Friends, I got stuck with fgets () & rewind() function .. Please need help.. Actually I am doing a like, The function should read lines from a txt file until the function is called.. If the data from the txt file ends then it goes to the top and then again when the function is called... (1 Reply)
Discussion started by: user_prady
1 Replies

8. Programming

fgets()

does anyone knows how to accept a command from a user.. i was wondering to use fgets(), but got no idea how to start it... (4 Replies)
Discussion started by: skanky
4 Replies

9. UNIX for Dummies Questions & Answers

Problems with ld.so.1

I renamed ld.so.1 on a Sun machine running Solaris 2.6. Now I cannot boot the system and I can use only very few commands in Maintenance Mode. Can someone help me? (3 Replies)
Discussion started by: ciccio
3 Replies

10. UNIX for Advanced & Expert Users

'make' problems (compliation problems?)

I'm trying to compile and install both most recent version of 'make' and the most recent version of 'openssh' on my Sparc20. I've run into the following problems... and I don't know what they mean. Can someone please help me resolve these issues? I'm using the 'make' version that was... (5 Replies)
Discussion started by: xyyz
5 Replies
Login or Register to Ask a Question