gpt4 book ai didi

c - 段错误: C-Program migrating from HPUX to Linux

转载 作者:行者123 更新时间:2023-11-30 18:15:10 32 4
gpt4 key购买 nike

我正在尝试将一个小型 C 程序从 hpux 迁移到 linux。该项目编译良好,但在运行时崩溃,显示段错误。我已经尝试使用 strace 和 gdb 查看镜子背后的情况,但仍然不明白。相关(截断)部分:

tts_send_2.c

包含一个方法

int sequenznummernabgleich(int sockfd, char *snd_id, char *rec_id, int timeout_quit) {
TS_TEL_TAB tel_tab_S01;
int n;

# truncated
}

从该文件中调用,如下所示:

. . .
. . .
switch(sequenznummernabgleich(sockfd,c_snd_id,c_rec_id,c_timeout_quit)) {

/* kritischer Fehler */
case -1:
. . .
. . .

当调用该方法时,我遇到了段错误(gdb 输出):

Program received signal SIGSEGV, Segmentation fault.
0x0000000000403226 in sequenznummernabgleich (sockfd=<error reading variable: Cannot access memory at address 0x7fffff62f94c>,
snd_id=<error reading variable: Cannot access memory at address 0x7fffff62f940>, rec_id=<error reading variable: Cannot access memory at address 0x7fffff62f938>,
timeout_quit=<error reading variable: Cannot access memory at address 0x7fffff62f934>) at tts_snd_2.c:498
498 int sequenznummernabgleich(int sockfd, char *snd_id, char *rec_id, int timeout_quit) {

我就是不明白。当我单步执行到使用 gdb 调用该方法的行时,所有变量看起来都很好:

1008    switch(sequenznummernabgleich(sockfd,c_snd_id,c_rec_id,c_timeout_quit)) {
(gdb) p sockfd
$9 = 8
(gdb) p &sockfd
$10 = (int *) 0x611024 <sockfd>
(gdb) p c_snd_id
$11 = "KR", '\000' <repeats 253 times>
(gdb) p &c_snd_id
$12 = (char (*)[256]) 0xfde220 <c_snd_id>
(gdb) p c_rec_id
$13 = "CO", '\000' <repeats 253 times>
(gdb) p &c_rec_id
$14 = (char (*)[256]) 0xfde560 <c_rec_id>
(gdb) p c_timeout_quit
$15 = 20
(gdb) p &c_timeout_quit
$16 = (int *) 0xfde660 <c_timeout_quit>

我还创建了一个 strace 输出。这是关于上面显示的代码的最后一部分:

strace output

有什么想法吗?我已经在网络和 stackoverflow 上搜索了几个小时,但没有找到真正类似的案例。

谢谢

克里兹

最佳答案

我已经很久没有使用过 HP/UX 了,但对于以下建议的内存却很模糊:

确保正确初始化变量/支柱。使用 calloc 而不是 malloc。

也不要假设特定的位模式顺序:例如低字节然后高字节。机器的 Ska 字节序。编译器中通常有宏可以为您处理适当的顺序。

关于c - 段错误: C-Program migrating from HPUX to Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40054368/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com