我刚刚编写了一个程序,将中缀表示法转换为后缀表示法,但我遇到了一个段错误。这是我第一次遇到分段错误,我不知道如何找到问题所在。我经历了几次代码,但是我无法找到我的代码试图访问受限制的内存空间的地方,或者是否有任何其他问题导致seg错误(我甚至不确定是什么段错误是)。
我不确定我是否允许将整个代码粘贴到此处。所以,我把它放在pastebin上:http://pastebin.com/M0mTU8Jg
另一个问题:在第13行的代码中,如果我更换
对strcat(")",infix)
infix[strlen(infix)]=")"
,我收到此警告:warning: assignment makes integer from pointer without a cast [enabled by default]
。这个警告的原因是什么?程序后面的类似声明不会引发任何警告,例如在行号中。 24
编辑: seg错误是因为我在strcat()函数中使用了错误的参数顺序,所以它试图将字符串附加到一个只读内存的常量。
没关系第二个问题,我正在给一个字符串(char *)分配一个警告。只需要用单引号替换双引号。
答案 0 :(得分:1)
您确实需要知道如何使用调试器并找到代码所针对的行,这是一项重要技能。话虽如此,我立即看到了一个原因:
strcat(")",infix);
strcat(char * dest, cosnt char * src)
附加到dest
,在这种情况下,dest
是存储在只读内存中的字符串常量。也许所有必要的是将参数的顺序颠倒到strcat()
,但我不知道你对infix
变量的意图。
答案 1 :(得分:0)
您可以使用调试器运行代码吗?它将向您显示哪些线段故障将发生。 这是关于segfault:http://en.wikipedia.org/wiki/Segmentation_fault