我相对较新的编程(几个月)并且正在尝试一些USACO问题。 当我提交我的程序时,它说:
运行1:执行错误:您的程序(“palsquare'”)退出 信号#11(分段违规[可能由访问引起) 内存越界,数组索引越界,使用坏 指针(失败的open(),malloc失败)或超过最大值 指定的内存限制])。该程序运行0.005 CPU秒 在信号之前。它使用了2168 KB的内存。
我无法找到任何解除引用的空指针,我最初认为这是问题所在。
这是我的代码(我用C语言编程)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
#include <math.h>
int ispal( char *square )
{
char *temp;
temp = square + strlen( square ) - 1;
for( temp = square + strlen( square ) - 1; square < temp; square++, temp-- )
{
if( *square != *temp )
return 0;
}
return 1;
}
void convert( char *square, int n, int base )
{
int len;
if( n == 0 )
{
square = "";
return;
}
convert( square, n / base, base );
len = strlen( square );
square[len] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n % base];
square[len + 1] = '\0';
}
int main()
{
char square[100];
char temp[100];
int i, base;
FILE *fin, *fout;
fin = fopen( "palsquare.in", "r" );
fout = fopen( "palsquare.out", "w" );
fscanf( fin, "%d", &base );
for( i = 1; i <= 300; i++ )
{
convert( square, i * i, base );
if( ispal( square ) )
{
convert( temp, i, base );
fprintf( fout, "%s %s\n", temp, square );
}
}
return 0;
}
答案 0 :(得分:0)
使用square = ""
,您将变量square
的值更改为指向空字符串。
由于此变量在函数convert
中是局部变量,因此更改它在函数外部无效。
如果要将指向数据设置为空字符串,请改用square[0] = '\0'
。
顺便说一句,即使它确实在函数之外产生了影响(例如,如果你使用了全局变量而不是局部变量),那么它不仅不会解决问题,而且还会产生一些问题糟糕的是:
由于这些事实中的每一个单独,任何尝试更改此变量指向的内存地址及其周围的内容都很可能在运行时产生内存访问冲突。