2012-03-31 53 views
0

我有2个指向某些点结构的指针。我想要计算2点之间的距离(我不需要计算其根),所以我有这样的:奇怪的printf方程

w[0]=X[l]; 
    w[1]=X[l+1]; 
    d=m(w[0]->x-w[1]->x)+m(w[0]->y-w[1]->y); 
    printf("--TEST %d %d %d\n",w[0]->x,w[1]->x,w[0]->x-w[1]->x); 

输入:X [1] =(0,1),X [L + 1] = (2,0) 输出: - 测试0 2 -1

这是为什么? 编辑:


这是一部分功能找到它发现2点与它们之间的最小距离。在主要我有这个:

X=(Punkt**)malloc(sizeof(Punkt*)*n); 
Y=(Punkt*)malloc(sizeof(Punkt)*n); 
int x,y; 
for(int i=0;i<n;++i) { 
    scanf("%d %d",&x,&y); 
    Y[i].x=x; 
    Y[i].y=y; 
    X[i]=(Punkt*)malloc(sizeof(Punkt*)); 
    X[i]=&Y[i]; 
} 
Quicksort(X,0,n-1); 
Punkt **wynik=find(0,n-1); 
printf("%d %d\n%d %d",wynik[0]->x,wynik[0]->y,wynik[1]->x,wynik[1]->y); 

我检查了Quicksort,它的工作原理应该如此。函数m:#define m(a)((a)*(a)) 只发现函数在那部分有bug。这工作,但我不想为每个坐标变量。

int trash1=w[0]->x; 
int trash2=w[1]->x; 
printf("--TEST %d %d %d\n",w[0]->x,w[1]->x,w[0]->x-w[1]->x,trash1-trash2); 

输入:2点(0,1),(2,0) 输出:--test 0 2 -1 -2

+1

你能提供一些更多的背景? “w”和“X”在哪里定义?你怎么知道数组中的值是你认为的值? – templatetypedef 2012-03-31 18:08:22

+0

我的猜测是:**未定义的行为**!如果您提供有问题的类型并在代码中使用更多空间,可能会更容易发现。 – pmg 2012-03-31 18:08:56

+0

请学习使用空格(和更好的变量名称)。 – jamesdlin 2012-03-31 18:09:37

回答

2

我试图重现您遇到什么。使用此我得到0 - 2 = - 2的结果:
换句话说,无法重现

#include <stdio.h> 
#include <stdlib.h> 

#define m(a) ((a)*(a)) 

typedef struct pkt { 
    int x; 
    int y; 
} Punkt; 

int main(void) 
{ 
    Punkt **X; 
    Punkt *Y; 
    Punkt *w[2]; 
    int x, y; 
    int n = 2; 
    int i; 

    X = malloc(sizeof(Punkt*) * n); 
    Y = malloc(sizeof(Punkt) * n); 

    printf("Enter 2 integer point pairs: "); 
    for(i = 0; i < n; ++i) { 
     scanf("%d %d", &x, &y); 
     Y[i].x = x; 
     Y[i].y = y; 
     X[i] = &Y[i]; 
    } 

    i = 0; 
    w[0] = X[i]; 
    w[1] = X[i + 1]; 
    i = m(w[0]->x - w[1]->x) + m(w[0]->y - w[1]->y); 

    printf("D: m(%d - %d) + m(%d - %d) = " 
      "%d + %d = " 
      "%d\n", 
      w[0]->x, w[1]->x, w[0]->y, w[1]->y, 
      m(w[0]->x - w[1]->x), m(w[0]->y - w[1]->y), 
      i); 

    printf("TEST: %d - %d = %d\n", 
      w[0]->x, 
      w[1]->x, 
      w[0]->x - w[1]->x); 

    free(X); 
    free(Y); 

    return 0; 
} 

样品:

$ ./pq 
Enter 2 integer point pairs: 0 1 2 0 
D: m(0 - 2) + m(1 - 0) = 4 + 1 = 5 
TEST: 0 - 2 = -2