c - Malloc 中不同操作系统的结果不同

标签 c windows malloc mingw

我尝试像树一样创建 BFS。我制作了树并将 child 排队。

我已经在这里写了代码https://github.com/cengek/CKDatastruct .

但奇怪的是,当我使用 Windows 和 MinGW 的 friend 编译它时,它返回错误。在 OSX 和 Linux 中不会发生这种情况。

我的 friend 说我使用malloc时出现错误。

我不知道发生错误的具体代码在哪里,但我认为它在这里

这是我将树的子元素放入队列的部分

   while (isEmpty(antrianNodes) != 1) {

        //tampilkan isinya
        printf("%c,", antrianNodes.first->paket.s->c);

        simpul * now = antrianNodes.first->paket.s;

        simpul * nodePertama = now;


        //jika punya anak
        //masukkan child dari node alamat di queue ke dalam queue sekarang

        if(now->child != NULL){
            simpul * nowchild = now->child;

            //jika punya saudara
            if(nowchild->sibling != NULL){

                //looping memasukkan anak-anak
                while (nowchild->sibling != now->child) {
                    add(&antrianNodes, nowchild);
                    nowchild = nowchild->sibling;
                }
                //masukkan yang terakhir
                add(&antrianNodes, nowchild);
            }else{
                //tak punya saudara masukkan saja satu
                add(&antrianNodes, nowchild);
            }
        }

        del(&antrianNodes);
    }

在这里将 child 添加到队列中,以便我可以处理它。它打印了 child 的打印。

void add(queue *Q, simpul *s){
elemen * baru = (elemen *) malloc(sizeof(elemen));
baru->paket.s = (simpul *) malloc(sizeof(simpul));
baru->paket.s = s;
baru->next = NULL;
if(isEmpty(*Q) == 1){
    (*Q).first = baru;
    (*Q).last = baru;

}else{
    (*Q).last->next = baru;
    (*Q).last = baru;
}

(*Q).jumlahElemen++;

}

我认为这是队列和树的普通代码。

老实说,我不知道确切的部分在哪里,因为它在每个操作系统中都有奇怪的不同,我尝试在 ideone 中编译它并给出正确的结果,如 http://ideone.com/vVNOe

我 friend 说windows的错误是这样的

Problem signature:
Problem Event Name: APPCRASH
Application Name:   main.exe
Application Version:    0.0.0.0
Application Timestamp:  4fa665b6
Fault Module Name:  main.exe
Fault Module Version:   0.0.0.0
Fault Module Timestamp: 4fa665b6
Exception Code: c0000005
Exception Offset:   000015e0
OS Version: 6.1.7601.2.1.0.256.48
Locale ID:  1033
Additional Information 1:   0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3:   0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

Read our privacy statement online:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409

If the online privacy statement is not available, please read our privacy statement offline:

C:\Windows\system32\en-US\erofflps.txt

每个操作系统执行不同的 malloc 吗?或者只是我的代码导致了错误?

致以诚挚的问候 吉里普

最佳答案

我不确定这是否是您问题的原因,但可能是。在 add() 中,您分配一个新的 simpul 并将该指针放入 paket 中,但随后您立即用传递的指针覆盖该指针add() 的参数:

baru->paket.s = (simpul *) malloc(sizeof(simpul));
baru->paket.s = s;

但我不确定。

<小时/>

此外,您的 makeTree() 函数需要初始化根节点的 child 成员:

baru->child=NULL;

关于c - Malloc 中不同操作系统的结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468022/

相关文章:

c - 如何在不更改内容的情况下更新文本文件

c - C 中基本互斥体导致程序锁定

检查线程是否正在运行

C++ : Using background colors with clrscr()

.net - 我可以将 mono 的 AOT 功能用于 native "pre-compile".NET DLL/EXE 以使其更难进行逆向工程吗?

无法使用 MALLOC 分配内存

c - 意外的 strcpy 段错误

c++ - 我们如何远程调试Linux服务器上运行的C++应用程序?

c - sizeof() 如何处理取消引用?

c - "reallocating"二维数组 C 的新内存时出现段错误