Bonjour à tous,

j'ai un programme Pro*C qui compile bien mais quand je l'exécute j'ai un segmentation fault :

LABEL: CORE_DUMP
IDENTIFIER: A63BEB70

Date/Time: Tue Jul 22 14:46:17 CDT 2008
Sequence Number: 626
Machine Id: 0057246A4C00
Node Id: tls03
Class: S
Type: PERM
Resource Name: SYSPROC

Description
SOFTWARE PROGRAM ABNORMALLY TERMINATED

Probable Causes
SOFTWARE PROGRAM

User Causes
USER GENERATED SIGNAL

Recommended Actions
CORRECT THEN RETRY

Failure Causes
SOFTWARE PROGRAM

Recommended Actions
RERUN THE APPLICATION PROGRAM
IF PROBLEM PERSISTS THEN DO THE FOLLOWING
CONTACT APPROPRIATE SERVICE REPRESENTATIVE

Detail Data
SIGNAL NUMBER
11
USER'S PROCESS ID:
409648
FILE SYSTEM SERIAL NUMBER
14
INODE NUMBER
2048
PROCESSOR ID
0
CORE FILE NAME
/u001/appli/ss10_dev/sh/core
PROGRAM NAME
ss10_SAP_extract
STACK EXECUTION DISABLED
0
ADDITIONAL INFORMATION
strlen 24
fSetHv F8
fExtractS B58
main 248
__start 94

Symptom Data
REPORTABLE
1
INTERNAL ERROR
0
Ce programme fonctionnait en 32 bits mais maintenant qu'on est passé en XL C/C++ Runtime for AIX 5.2 (64 bits) ça ne marche plus...

voici le code de la fonction qui je pense pose pb :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
/****************************************************************/
/*                                                              */
/* Function : fSetHv                                            */
/*                                                              */
/* Description    : Initialize the value and the length         */
/*                                                              */
/****************************************************************/
 
int fSetHv(phvHvName, piIndicator, pcValue)
VARCHAR *phvHvName;
short *piIndicator;
char *pcValue;
{
 
if(pcValue == NULL)
   {
   strcpy((char *)phvHvName->arr, "");
   phvHvName->len = 0;
   if(piIndicator != NULL)
      {
      *piIndicator = -1;
      }
   }
else
   {
   if(piIndicator != NULL) *piIndicator = 0;
   phvHvName->len = strlen(pcValue);
   strncpy((char *)phvHvName->arr, pcValue, phvHvName->len);
   }
return((piIndicator != NULL)? *piIndicator : 0);
}
je sais qu'il y a peut-être cette histoire de pointeur et d'allocation mémoire...mais j'avoue ne pas trop maîtriser ce concept.

j'ai pensé ajouté ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
phvHvName->arr[phvHvName->len] = '\0';
mais reste à savoir à quel moment et s'il ne faut pas modifier le code initial.

Pouvez-vous m'aider svp ?

Cat