Sponsored Content
Top Forums Programming memcpy segfaults, but not in windows Post 93515 by khoma on Monday 19th of December 2005 08:37:36 PM
Old 12-19-2005
memcpy segfaults, but not in windows

Hi

Having a lil trouble with a rather simple application I'm writing. It so happens that I have to copy some data using memcpy() and so far I've been doing just fine compiling it with VC.Net and running it on Windows XP. Now I'm trying to port the thing to Solaris (which shouldn't really be too big a deal) and for some reason it is causing problems.

Code:
int SendPacket(unsigned short packNo, const char* data, unsigned short sSize){
	int addrlen = sizeof(struct sockaddr);
	int iRet = 0;
	PutShortAt(buffer, OP_DATA);	// Insert DATA op code
	PutShortAt(buffer + 2, packNo);	// Insert packet number
	memcpy(buffer + 4, data, sSize); // Insert the actual data
	iRet = sendto(iSock, buffer, sSize + 4, 0, (struct sockaddr *)&sraddr,addrlen);	// Send packet

	printf("Sent %d bytes\n", iRet);
	return IOK;
}

The line which causes the segfault is the memcpy() line. Basically, what I'm trying to do is this;

const char* data contains 512 bytes of arbitrary data that is to be added to a 516 byte packet which will then be transmitted to a computer somewhere on the internet. Byte 4-516 will contain the data. The first 4 bytes in the packet are reserved for packet information in the form of two shorts. sSize is of course the data size.

Any ideas as to what may be causing this? Like I said earlier, it runs just fine on Windows (of course with the appropriate modifications to net code, winsock and such). Any help would be greatly appreciated.
 

5 More Discussions You Might Find Interesting

1. Programming

Problem with memcpy

Hi , I am having records in a file like 00412772784705041008FRUITFUL STRWBRRY 00412772784703041008FRUITFUL STRWBERE 00000570632801448078 X i have declared a structure like typedef struct { char Uname; char Pname; ... (4 Replies)
Discussion started by: arunkumar_mca
4 Replies

2. Programming

Segmentation Fault by memcpy

Hello everybody, I'm coding a test program for ARP protocol, and i don't know why i'm getting a SIGSEGV, i traced it with gdb and it says it's due to the memcpy function from /lib/libc.so.6. Program received signal SIGSEGV, Segmentation fault. 0xb7e9e327 in memcpy () from /lib/libc.so.6 This... (5 Replies)
Discussion started by: Zykl0n-B
5 Replies

3. Programming

Segfaults on pointer deletion

Hey Everyone, I have a check similar to this: if (ptr) { delete ptr; ptr = null; }When I'm debugging in AIX (using dbx), if I attempt to print the value of 'ptr' it says "ptr is not defined" - however, it still enters that if block. So, I'm getting segfaults on the delete... (8 Replies)
Discussion started by: ctote
8 Replies

4. Programming

memcpy error

I am getting segmentation fault in memcpy.I have given sufficient memory but i dont know why it is occurring char *finalptr = ( char *)malloc(1048576* sizeof(char)); finaloffset=0;have=685516; memcpy(&(finalptr)+finaloffset,out,have); finaloffset=685516;have=359910;... (23 Replies)
Discussion started by: rajsekhar28
23 Replies

5. Shell Programming and Scripting

Undefined reference to memcpy@GLIBC_2.14

Dear All, I am trying to compile OpenFOAM-1.7.x in RHEL. I could not able to compile some of the applications because of libc version issues. It is saying undefined reference to memcpy@GLIBC_2.14 Can anybody look into it? Thanks & Regards, linuxUser_ (3 Replies)
Discussion started by: linuxUser_
3 Replies
ldns(3) 						     Library Functions Manual							   ldns(3)

NAME
ldns_pkt_edns, ldns_pkt_edns_udp_size, ldns_pkt_edns_extended_rcode, ldns_pkt_edns_version, ldns_pkt_edns_z, ldns_pkt_edns_data, ldns_pkt_set_edns_udp_size, ldns_pkt_set_edns_extended_rcode, ldns_pkt_set_edns_version, ldns_pkt_set_edns_z, ldns_pkt_set_edns_data- SYNOPSIS
#include <stdint.h> #include <stdbool.h> #include <ldns/ldns.h> bool ldns_pkt_edns(const ldns_pkt *packet); uint16_t ldns_pkt_edns_udp_size(const ldns_pkt *packet); uint8_t ldns_pkt_edns_extended_rcode(const ldns_pkt *packet); uint8_t ldns_pkt_edns_version(const ldns_pkt *packet); uint16_t ldns_pkt_edns_z(const ldns_pkt *packet); ldns_rdf* ldns_pkt_edns_data(const ldns_pkt *packet); void ldns_pkt_set_edns_udp_size(ldns_pkt *packet, uint16_t s); void ldns_pkt_set_edns_extended_rcode(ldns_pkt *packet, uint8_t c); void ldns_pkt_set_edns_version(ldns_pkt *packet, uint8_t v); void ldns_pkt_set_edns_z(ldns_pkt *packet, uint16_t z); void ldns_pkt_set_edns_data(ldns_pkt *packet, ldns_rdf *data); DESCRIPTION
ldns_pkt_edns() returns true if this packet needs and EDNS rr to be sent. At the moment the only reason is an expected packet size larger than 512 bytes, but for instance dnssec would be a good reason too. packet: the packet to check Returns true if packet needs edns rr ldns_pkt_edns_udp_size() return the packet's edns udp size packet: the packet Returns the size ldns_pkt_edns_extended_rcode() return the packet's edns extended rcode packet: the packet Returns the rcode ldns_pkt_edns_version() return the packet's edns version packet: the packet Returns the version ldns_pkt_edns_z() return the packet's edns z value packet: the packet Returns the z value ldns_pkt_edns_data() return the packet's edns data packet: the packet Returns the data ldns_pkt_set_edns_udp_size() Set the packet's edns udp size packet: the packet s: the size ldns_pkt_set_edns_extended_rcode() Set the packet's edns extended rcode packet: the packet c: the code ldns_pkt_set_edns_version() Set the packet's edns version packet: the packet v: the version ldns_pkt_set_edns_z() Set the packet's edns z value packet: the packet z: the value ldns_pkt_set_edns_data() Set the packet's edns data packet: the packet data: the data AUTHOR
The ldns team at NLnet Labs. Which consists out of Jelte Jansen and Miek Gieben. REPORTING BUGS
Please report bugs to ldns-team@nlnetlabs.nl or in our bugzilla at http://www.nlnetlabs.nl/bugs/index.html COPYRIGHT
Copyright (c) 2004 - 2006 NLnet Labs. Licensed under the BSD License. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. SEE ALSO
ldns_pkt. And perldoc Net::DNS, RFC1034, RFC1035, RFC4033, RFC4034 and RFC4035. REMARKS
This manpage was automaticly generated from the ldns source code by use of Doxygen and some perl. 30 May 2006 ldns(3)
All times are GMT -4. The time now is 09:42 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy