1

我在 C 程序中定义的宏似乎有问题。

我编译这个软件并使用 MIPS 编译器成功运行它。

它构建正常,但在使用 icc 时会在运行时引发错误“分段错误”。

我在 64 位架构上编译了这两个架构(SGI 上的 MIPS,intel 平台上带有 -64 标志和 icc)。

我需要使用一些魔术开关来使其在两个系统上都能正常工作吗?我为英特尔编译器打开了警告,程序中调用宏的每个地方都会引发警告。通常是宏参数上的类型不匹配(int 到 char *)或类似的东西。

这是有问题的宏

 #define DEBUG_ENTER(name) {tdepth++; 
 if(tnames[tdepth] == NULL) tnames[tdepth] = memalign(8, sizeof(char)*MAXLEN);
 strcopy(tnames[tdepth],name);
 FU_DEBUG("Entering \n");}

这基本上用于调试 - 根据函数调用的数量打印到带有一组选项卡的日志文件。(tdepth = 标签深度)

我在手册页中做了一些检查。似乎 memalign 仅在 IRIX 上受支持。这可能是我的问题。我要追踪它。

4

3 回答 3

1

这可能与系统的“字节顺序”有关。看这里,似乎 MIPS 具有可切换的字节顺序。我不确定你是否已经使用了正确的字节顺序,但如果你没有,你肯定会遇到问题。

于 2010-05-27T19:19:53.207 回答
0

听起来数组tnames是一个数组int。如果您要为其分配指针,它应该是指针类型的数组 - 在这种情况下可能char *是合适的。

(另外,strcopy()这不是标准功能 - 你确定你不是这个意思strcpy()吗?)

于 2010-05-27T22:27:03.733 回答
0

这可能是字节顺序问题。MIPS 可以是大端,但英特尔是小端。

于 2010-05-27T19:19:02.987 回答