![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| High Level Programmering Post spørsmål om C, C + +, Java, SQL og andre programmeringsspråk her. |
Mer UNIX og Linux Forum Emner Du kan finne nyttig
|
||||
| Tråd | Tråd startet | Forum | Svar | Siste innlegg |
| segmentering skyld | joey | High Level Programmering | 3 | 12-22-2008 05:28 |
| Segmentering skyld | big123456 | Linux | 0 | 07-20-2007 06:01 |
| fwrite kast segmentering skyld | fermisoft | High Level Programmering | 6 | 09-13-2005 02:46 |
| Segmentering skyld | jshaulis | AIX | 1 | 06-01-2004 05:16 |
| segmentering skyld | omran | High Level Programmering | 2 | 08-01-2003 09:19 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
segmentering skyld i fwrite funksjon
Hei,
min-koden er skrevet i proc og det er i Unix (AIX). Jeg har skrevet en liten kode for å skrive data inn i en binær fil, men mens du skriver min programmet gir core dump. Her er min kode ---- fpWriteFile \u003d fopen (WriteFileName, WB + "); CHAR * recvgen; recvgen \u003d (char *) malloc (sizeof (char) * NSE_MAX_PACKET_RECV_SIZE); fwrite (recvgen, NSE_MAX_PACKET_RECV_SIZE, 1, fpWriteFile); |
|
||||
|
Jeg gjorde følgende kode endre ...
memset (recvgen, '\ 0', NSE_MAX_PACKET_RECV_SIZE); fortsatt samme problemet i debug bruke dbx ... dens viser segmentering feil på fwrite. også sizeof (recvgen) er 4 hvor jeg har definert NSE_MAX_PACKET_RECV_SIZE \u003d 1050 |
|
||||
|
Jeg gjetter problemet er enten i WriteFileName eller fwriting til en lukket strøm på grunn av feilaktig bekreftelse hvis fopen () mislykkes. Følgende kode fungerer under Linux Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define NSE_MAX_PACKET_RECV_SIZE 1050
int
main(int argc, char *argv[])
{
FILE *fpWriteFile;
char *recvgen;
char WriteFileName[1024];
if (argc != 2)
exit(1);
strncpy(WriteFileName, argv[1], 1024);
if (strlen(argv[1]) >= 1024)
WriteFileName[1023] = '\0';
fpWriteFile = fopen(WriteFileName,"wb+");
if (fpWriteFile == NULL)
exit(1);
recvgen = (char *)malloc(sizeof(char)*NSE_MAX_PACKET_RECV_SIZE);
if (recvgen == NULL)
exit(1);
fwrite (recvgen,NSE_MAX_PACKET_RECV_SIZE,1,fpWriteFile);
exit (0);
}
Code:
cc -o file file.c ./file `perl -e 'print "A" x 10'` && echo $? -> OK: 0 ./file `perl -e 'print "A" x 1024'` ; echo $? -> NOT OK (failing with filename too long): 1 Du vil ikke ha en segfault nå, kan du prøve å bare debug det med printf () s, og finne ut problemet. |
![]() |
| Hugseliste |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|