标题:malloc时触发断点
只看楼主
cabage
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-4-15
结帖率:80%
已结贴  问题点数:20 回复次数:8 
malloc时触发断点
程序代码:
void QueueAppend(LQueue *Q, int x)
{
    LQNode *p = (LQNode *)malloc(sizeof(LQNode));++++++++++++++++++++++++++++

   p->data = x;
   p->next = NULL;

   if(Q->rear != NULL)
       Q->rear->next = p;
   Q->rear = p;
   if(Q->rear == NULL)
       Q->front == p;
}


程序代码:
void RadixSort(int *a,int n, int m,int d)  
{
      int i, j, k, power = 1;
      LQueue *tub;
      tub = (LQueue *)malloc(sizeof (LQueue )* d);

      for(i = 0; i < d; i++)
          QueueInitiate(&tub[i]);                            
      for(i = 0; i < m; i++){
          if(i == 0)
              power = 1;
          else
                power = power *d;
          for(j = 0; j < n; j++){
              k = a[j] /power - (a[j] /(power * d)) * d;
              QueueAppend(&tub[k], a[j]);   
          }
          
          k = 0;
          for(j = 0; j < d; j++)
              while(QueueNotEmpty(tub[j]) != 0){
                  QueueDelete(&tub[j], &a[k]);++++++++++++++++++++++
                  k++;
              }
      }
}


RadixSort函数调用QueueAppend时,+++++++++++++++++标志的语句触发了断点。我在main函数中直接调用QueueAppend函数时却没有触发。编译器是vs2012
搜索更多相关主题的帖子: 断点 触发 power malloc int 
2020-10-11 20:59
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:20 
代码全贴出来
问题不在你发的代码里面

https://zh.
2020-10-11 23:50
cabage
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-4-15
得分:0 
回复 2楼 lin5161678
程序代码:
#include <stdio.h>
#include <stdlib.h>

typedef struct qnode
{
    int data;            /*队列结点*/
    qnode *next;
}LQNode;

typedef struct                                                                          
{
    LQNode *front;           /*队列头尾指针*/                      
    LQNode *rear;                                  
}LQueue;

void QueueInitiate(LQueue *Q)
{
    Q->rear = NULL;
    Q->front = NULL;
}

void QueueAppend(LQueue *Q, int x)
{
    LQNode *p = (LQNode *)malloc(sizeof(LQNode));++++++++++

   p->data = x;
   p->next = NULL;

   if(Q->rear != NULL)
       Q->rear->next = p;
   Q->rear = p;
   if(Q->rear == NULL)
       Q->front == p;
}

int QueueNotEmpty(LQueue Q)
{
    if(Q. front == NULL) return 0;
    else return 1;
}

int QueueDelete(LQueue *Q,int *d)
{
    LQNode *p;

    if(Q->front == NULL){
         printf ("队列已空无数据元素出队列! \n");
         return 0;
    }
    else{
      *d  = Q->front->data;
      p = Q->front;
      Q->front = Q->front->next;
      if(Q->front == NULL) Q->rear = NULL;
    }

      free(p);
      return 1;
}

void RadixSort(int *a,int n, int m,int d)  
{
      int i, j, k, power = 1;
      LQueue *tub;
      tub = (LQueue *)malloc(sizeof (LQueue )* d);

      for(i = 0; i < d; i++)
          QueueInitiate(&tub[i]);                            
      for(i = 0; i < m; i++){
          if(i == 0)
              power = 1;
          else
                power = power *d;
          for(j = 0; j < n; j++){
              k = a[j] /power - (a[j] /(power * d)) * d;
              QueueAppend(&tub[k], a[j]);   
          }
          
          k = 0;
          for(j = 0; j < d; j++)
              while(QueueNotEmpty(tub[j]) != 0){
                  QueueDelete(&tub[j], &a[k]);
                  k++;
              }
      }
}

void main()
{
    stu *class1 = (stu *)calloc(sizeof(stu),1);
    /*int *class1_average = (int *)malloc(sizeof(stu));*/++++++++++++++++++++
    int class1_average[8] = {21,31,41,81,51,61,71,11};

    RadixSort(class1_average,8,2,10);
    printf("OK");
    
}



这是全部代码RadixSort里要用到的代码 利用链式队列来做基数排序的 ++++标志的本来是要读取文件里的数据的,这里我换成数组了。 RadixSort参数分别是指针,数组长度,数据的位数,进制

[此贴子已经被作者于2020-10-12 16:00编辑过]

2020-10-12 13:11
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
程序代码:
void QueueAppend(LQueue *Q, int x)
{
    LQNode *p = (LQNode *)malloc(sizeof(LQNode));

    p->data = x;
    p->next = NULL;

    if(Q->rear != NULL)
        Q->rear->next = p;
    Q->rear = p;
    if(Q->rear == NULL)
        Q->front == p;
}

插入函数完全写错
    Q->rear = p;
    if(Q->rear == NULL)
假如 p不是NULL 那么Q->rear == NULL求值结果为0 Q->front不会赋值
假如 p是NULL 那么Q->rear == NULL求值结果为1 Q->front赋值为NULL
等于不管什么情况 Q->front 永远为NULL
程序代码:
void QueueAppend(LQueue *Q, int x)
{
    LQNode *p = (LQNode *)malloc(sizeof(LQNode));

    p->data = x;
    p->next = NULL;

    if(Q->front == NULL)
        Q->front = p;
    else
        Q->rear->next = p;
    Q->rear = p;
}



https://zh.
2020-10-12 15:15
cabage
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-4-15
得分:0 
回复 4楼 lin5161678
malloc下面的代码有问题也会导致malloc触发断点吗?

[此贴子已经被作者于2020-10-12 15:56编辑过]

2020-10-12 15:53
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
回复 5楼 cabage
你贴的代码不存在这个问题
贴你出问题的代码

https://zh.
2020-10-12 15:54
cabage
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-4-15
得分:0 
回复 6楼 lin5161678
3楼的代码就是了 就只是用radixsort来为average数组排序 其他的代码没有用上3楼代码的东西 我这边调试是一直触发断点的
2020-10-12 16:05
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
以下是引用cabage在2020-10-12 16:05:36的发言:

3楼的代码就是了 就只是用radixsort来为average数组排序 其他的代码没有用上3楼代码的东西 我这边调试是一直触发断点的

触发断点截图看看

https://zh.
2020-10-12 16:55
cabage
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-4-15
得分:0 
回复 8楼 lin5161678
谢谢了 已经解决了 仔细看了一遍其他代码 还真出错了
2020-10-12 18:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503432-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053712 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved