我对C相对比较陌生(并且对于StackOverflow来说是全新的 - 嗨,伙计们!),并且这段错误在过去的几个小时里(DevC++在Windows机器上)一直没有让我感到悲伤。这只是一个简单的回文总理计划,但它确实给了我很大的困难。我通常不是像这里看起来那样的新手程序员,但是......好神。现在我记得我为什么想很快脱离C++和Python。什么是故障 - 段故障,即...?
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
FILE *outputFile;
char buffer[81];
char* strrev();
int bytesWritten;
char* strI = 0;
char *strrev(char str[])
{
char *p1 =NULL;
char *p2 =NULL;
if (! str || ! *str)
return str;
for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
{
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
}
return str;
}
main()
{
int isPrime(int);
int i,j;
outputFile = fopen("DD:OUTPUT", "w");
if (outputFile == NULL)
{
printf("open error: %d/%s\n", errno, strerror(errno));
exit(99);
}
for (i=1; i<15000; i++)
{
if (isPrime(i)==1)
{
bytesWritten = sprintf(buffer,"%d is primepal!\n",i);
fwrite(buffer, 1, bytesWritten, outputFile);
}
}
fclose(outputFile);
return 0;
}
int isPrime(int myInt)
{
int loop;
for (loop = 2; loop < myInt/2+1; loop++)
sprintf(strI, "%s%d", 10, myInt);
{
if (myInt%loop==0 && (atoi(strrev(strI))-myInt)==0)
{
return 0;
}
return 1;
}
}
我道歉提前如果这是一个愚蠢的问题,答案是很明显的 - 但我已经正式登陆。不管答案如何合乎逻辑的,我已经编码相同的限制问题太长以至于没有任何意义。此外,segfaults是可怕的野兽。提前谢谢你提供的任何东西!
〜约旦
有一个名为Valgrind的Linux程序,可以准确地告诉你段错误发生的位置。有一个[关于Valgrind替代Windows的问题](http://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows)。 –
啊,我其实就是在几秒钟之前的那个问题 - 肯定会下载(然后祈祷我再也不用它了)。感谢您的参考! – j6m8
您可能需要再次使用它,但只要运行'valgrind myprogram'并且它不会打印出您的程序出了什么问题。它甚至会在某些情况下告诉你内存泄漏的行号。 –