如何修复C中的坏指针

时间:2013-07-26 23:06:56

标签: c pointers

我是C的初学者,当我试图制作一个简单的蛇游戏时,我偶然发现了在另一个函数中使用指针时值的变化问题。我使用指针来生长我的蛇,我使用了其中的3个。虽然这可能是一个真正的蛇形游戏算法,但我觉得我几乎在那里,但我无法弄清楚出了什么问题。我已经使用了蛇本身的3个指针,蛇的每个部分的x坐标以及y。我不妨发布我的部分代码。

#include<stdio.h>
#include<dos.h>
#include<conio.h>

printer(int *forgoodness,int *y,char *lang,int tx,int ty, int *x)
{
int h=*forgoodness-1,g=0;

这里的值会发生变化,不知何故,x会复制y的6个值。

 /* for(;g<15;g++)
{
    printf("%i",x[g]);
}*/
for(;h>=0;h--)
{
    gotoxy(x[h],y[h]);
    printf("%c",lang[h]);
}
    gotoxy(tx,ty);
    printf(" ");
}  


main()
{
int transferx=1,x=1,transfery=1,ch,game=0,dir;
int *transx, *transy, *numel;
int tempsx,g=0,tempsy,forex,j=0,*totalel;
char *snake;
int *snakey, *snakex;

如果我明确指定值,它运作良好,但我不能使用它来增长我的蛇:

//int snakex[15]={26,27,28,29,30,31,32,33,34,35,36,37,38,39,40};
//int snakey[15]={13,13,13,13,13,13,13,13,13,13,13,13,13,13,13};
clrscr();
*totalel=0;
*numel=14;
forex=26;
snake= "***************";

这就是我所做的,我在功能打印机运行之前检查了值,并且值很好。

for(;j<15;j++)
{
    snakey[j]=13;
    snakex[j]=forex;
    *totalel=j;
    forex++;
}


printer(numel,snakey,snake,transferx,transfery,snakex);

我希望你能帮助我。欢呼声。

2 个答案:

答案 0 :(得分:2)

也许尝试重写一些代码...理想情况下使用较少的指针。根据我看到的代码,看起来好像你正在将值提供给随机指针。这非常危险。

例如,连续执行这两行是不好的:

int *num;
*num = 9;

原因是因为num只是一个指向内存的指针......它当前并没有指向任何有效的东西。数字9试图存储在某个随机位置。您需要为num分配一些内存以指向或指向另一个变量的地址(非指针整数)。我想也许你还没有完全掌握指针的概念。但不要担心,这需要一点时间。

你应该能够在不使用任何指针的情况下编写游戏,也许就像其他人提到的那样,现在只使用固定阵列。然后再做一些关于指针如何工作的内容并再次尝试它。我相信你会明白的!

但是现在,尝试用一组新的数据重新审视这个问题,然后用你所做的事情回到我们身边,这样我们就可以尝试进一步提供帮助。 :)

答案 1 :(得分:1)

很酷,你正在使用指针!但正如你所看到的,它们可能有点棘手。你必须记住,指针就像邮箱的地址;他们可以告诉某事情在哪里,但他们不能(在他们自己)坚持任何事情。可以指出一些事情。因此,您声明的每个指针必须指向真实的东西(如int或数组元素或数组)才能使用或分配。否则将值推入随机存储区域,导致崩溃。这似乎是你遇到的主要问题。

int *ptr;
int value; 
ptr = &value;
*ptr = 10;
// value now is 10