Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
该程序可以在Mac OS中运行,但不能在Windows中运行_C - Fatal编程技术网

该程序可以在Mac OS中运行,但不能在Windows中运行

该程序可以在Mac OS中运行,但不能在Windows中运行,c,C,请原谅从其他站点复制粘贴,例如: 我编写了一个程序,将数据存储在一个表中,像链表一样链接(不知道这是否是一个原创想法——我自己提出的,但可能不是一个新想法)。它在Windows上成功编译,但当我运行它时,它只是说 “dlt_table.exe遇到错误,需要关闭。” 我唯一一次遇到这个问题是有一次出于病态的好奇,我试图取消对空指针的引用。意识到系统可能只是从malloc()返回空指针,我尝试检查错误。还是没什么 然后,我在我的Mac电脑上试了一下。它构建起来没有任何问题,更棒的是,我提出的算法确实

请原谅从其他站点复制粘贴,例如:

我编写了一个程序,将数据存储在一个表中,像链表一样链接(不知道这是否是一个原创想法——我自己提出的,但可能不是一个新想法)。它在Windows上成功编译,但当我运行它时,它只是说

“dlt_table.exe遇到错误,需要关闭。”

我唯一一次遇到这个问题是有一次出于病态的好奇,我试图取消对空指针的引用。意识到系统可能只是从
malloc()
返回空指针,我尝试检查错误。还是没什么

然后,我在我的Mac电脑上试了一下。它构建起来没有任何问题,更棒的是,我提出的算法确实有效!但我仍然不明白为什么它不适用于Windows。代码如下:

#include <stdio.h>
//#include <conio.h> (Windows only- taking it out for Mac dev)
#include <stddef.h>
#include <stdlib.h>

/*############################################################################*/

/*Node structure-- this is what the table is built off.*/
typedef struct dlt_node {
        int value;
        struct dlt_node *left, *right, *up, *down;
        } dlt_node_t;

/*############################################################################*/

/*Function prototypes-- visible at bottom of file.*/        
dlt_node_t *make_table(void);
int len_table(dlt_node_t *bucket);
int parse_table(dlt_node_t *bucket);

/*############################################################################*/

main()
{
      dlt_node_t *bucket = make_table();

int table_size = len_table(bucket);
      printf("Table size: %i\n", table_size);

parse_table(bucket);

//getch();
      return 0;
      }

/*############################################################################*/

/*Make a table, and return the table's bucket.*/
dlt_node_t *make_table(void)
{
           /*Allocate structures.*/
           dlt_node_t *bucket = (struct dlt_node*) malloc(sizeof(struct dlt_node));
           dlt_node_t *node1 = (struct dlt_node*) malloc(sizeof(struct dlt_node));
           dlt_node_t *node2 = (struct dlt_node*) malloc(sizeof(struct dlt_node));
           dlt_node_t *node3 = (struct dlt_node*) malloc(sizeof(struct dlt_node));

/*Check for NULL's.*/
           if(bucket == NULL || node1 == NULL || node2 == NULL || node3 == NULL){
                     printf("ERR: ENOMEM.\n");
        //             getch();
                     return;
                     }

/*Assign values, then pointers to other members of the table*/
           bucket->value = 1;
           node1->value = 2;
           node2->value = 3;
           node3->value = 4;

bucket->left = NULL;
           bucket->right = node1;
           bucket->up = NULL;
           bucket->down = node2;

node1->left = bucket;
           node1->right = NULL;
           node1->up = NULL;
           node1->down = node3;

node2->left = NULL;
           node2->right = node3;
           node2->up = bucket;
           node2->down = NULL;

node3->left = node2;
           node3->right = NULL;
           node3->up = node1;
           node3->down = NULL;

/*Return the table's bucket.*/
           return bucket;
           }

/*Find the number of nodes in the table. Skewed if nodes are randomly deleted.*/
int len_table(dlt_node_t *bucket)
{
    dlt_node_t *probe_x, *probe_y;
    int x = 0, y = 0;

for(probe_y; probe_y != NULL; probe_y = probe_y->right) y++;

for(probe_x;probe_x!=NULL;probe_x = probe_x->right) x++;

return x*y;
    }

/*Parse the table, print values.*/
int parse_table(dlt_node_t *bucket){
    dlt_node_t *current, *current_row = bucket;

for ( current_row; current_row!=NULL; current_row = current_row->down ){
        current = current_row;
        for ( current; current != NULL; current = current->right ){
                            printf( "Current value: %i\n", current->value );
                             }
        }
    }
#包括
//#包括(仅限Windows-为Mac开发人员取出)
#包括
#包括
/*############################################################################*/
/*节点结构——这是构建表的基础*/
类型定义结构dlt_节点{
int值;
结构dlt_节点*左、*右、*上、*下;
}dlt_node_t;
/*############################################################################*/
/*函数原型--在文件底部可见。*/
dlt_节点*make_表(无效);
int len_table(dlt_node_t*bucket);
int parse_table(dlt_node_t*bucket);
/*############################################################################*/
main()
{
dlt_节点_t*bucket=make_table();
int table_size=len_table(桶);
printf(“表格大小:%i\n”,表格大小);
解析_表(bucket);
//getch();
返回0;
}
/*############################################################################*/
/*做一张桌子,然后把桌子的桶还给我*/
dlt_节点_t*生成_表(无效)
{
/*分配结构*/
dlt_node_*bucket=(struct dlt_node*)malloc(sizeof(struct dlt_node));
dlt_node_*node1=(struct dlt_node*)malloc(sizeof(struct dlt_node));
dlt_node_*node2=(struct dlt_node*)malloc(sizeof(struct dlt_node));
dlt_node_t*node3=(struct dlt_node*)malloc(sizeof(struct dlt_node));
/*检查空的*/
如果(bucket==NULL | | node1==NULL | | node2==NULL | | node3==NULL){
printf(“ERR:ENOMEM.\n”);
//getch();
返回;
}
/*分配值,然后指向表的其他成员*/
bucket->value=1;
节点1->值=2;
节点2->值=3;
节点3->值=4;
bucket->left=NULL;
bucket->right=node1;
bucket->up=NULL;
铲斗->下降=节点2;
节点1->左=铲斗;
node1->right=NULL;
node1->up=NULL;
node1->down=node3;
node2->left=NULL;
node2->right=node3;
node2->up=铲斗;
node2->down=NULL;
node3->left=node2;
node3->right=NULL;
node3->up=node1;
node3->down=NULL;
/*把桌子的桶还给我*/
返回铲斗;
}
/*查找表中的节点数。如果随机删除节点,则会发生扭曲*/
int len_表格(dlt_节点_*bucket)
{
dlt_节点*probe_x,*probe_y;
int x=0,y=0;
对于(probe_y;probe_y!=NULL;probe_y=probe_y->right)y++;
对于(probe_x;probe_x!=NULL;probe_x=probe_x->right)x++;
返回x*y;
}
/*解析表,打印值*/
int parse_表(dlt_node_t*bucket){
dlt_节点_t*当前,*当前_行=存储桶;
对于(当前行;当前行!=NULL;当前行=当前行->向下){
当前=当前行;
对于(当前;当前!=NULL;当前=当前->右侧){
printf(“当前值:%i\n”,当前->值);
}
}
}

很抱歉复制粘贴,Lockergnome.net上没有人有任何建议,他们建议在这里询问。

在函数
len\u表中
您尚未初始化指针
probe\u x
probe\u y
。(它们在c中未默认初始化为NULL)。因此,在循环的第一次迭代中,您的程序可能会崩溃。

在函数
len_表中
您尚未初始化指针
probe_x
probe_y
。(它们在c中未默认初始化为NULL)。因此,在循环的第一次迭代中,您的程序可能会崩溃。

您在Windows上使用的编译器是什么?您使用的conio.h表明是一个旧的Borland编译器,但我无法用C++Builder XE或GCC 4.3.3在Windows上重现您的崩溃。流血软件Dev-C++4.9.9.2.BTW:头文件没有显示的原因是您的代码格式不正确-您应该在每行代码前放置4个空格,而不是将其包装在HTML标记中。我已经为您修复了它:下次,您可以简单地粘贴代码,选择它,然后点击{}按钮。谢谢。我想知道为什么它没有出现。我是这里的新手,非常感谢您的帮助。您在Windows上使用的是什么编译器?您使用的conio.h表明是一个旧的Borland编译器,但我无法用C++Builder XE或GCC 4.3.3在Windows上重现您的崩溃。流血软件Dev-C++4.9.9.2.BTW:头文件没有显示的原因是您的代码格式不正确-您应该在每行代码前放置4个空格,而不是将其包装在HTML标记中。我已经为您修复了它:下次,您可以简单地粘贴代码,选择它,然后点击{}按钮。谢谢。我想知道为什么它没有出现。我是这里的新手,非常感谢你的帮助。你说得对。我没有注意到。实际上,我从那个函数中得到了奇怪的结果。非常感谢,你说得对。我没有注意到。事实上,我得到了w