decomp.exe 中的 0x00fc15eb 处未处理的异常: 0xC0000005: 读取位置 0xcdcdcdcd 时发生访问冲突

时间:2022-08-30 00:22:57
#include<stdio.h>
#include<stdlib.h>
struct line{
int pn;
int i;
struct line * next;
};

void decompoFactor (struct line *p,int n);
main()
{
int n;
int k=2;
struct line *root,*p;
scanf("%d",&n);
if(n<2||n>30000){
printf(" error input");
return 0;
}
p=(struct line*)malloc(sizeof(struct line));
root=p;
p->i=0;
p->pn=2;
while (k++<=n){
decompoFactor(p,k);
p=root;
}
p=root;
printf("%d ^ %d ",p->pn,p->i);
p=p->next;
while (p!=NULL){
printf("* %d ^ %d ",p->pn,p->i);
p=p->next;
}
}


void decompoFactor (struct line *p,int n){// 分解因数;
while (p!=NULL){
if((n%(p->pn))==0){
n=n/(p->pn);
(p->i)++;
}
p=p->next;
}
if(p==NULL){
p=(struct line*)malloc(sizeof(struct line));
p->i=1;
p->pn=n;
}
}

6 个解决方案

#1


上述题目是:
N!的分解

【问题描述】
将N!分解成素数幂的乘积。
【输入形式】
    从标准输入读取一个整数N(1≤N≤30000)。
【输出形式】
结果打印到标准输出。

输出格式为:p1^k1*p2^k2…其中p1,p2…为质数且ki>1。当ki=1时只输出pi,ki=0的项不输出。分解式中的素数按从小到大输出。
【输入样例】
5
【输出样例】
2^3*3*5

#2


mark

#3


win32下的内存分配
0xcdcdcdcd - Created but not initialised
0xfdfdfdfd - 分配的CD区域前后各有一个,标示边界
0xdddddddd - Deleted,CRT中称处于这种状态的内存区为 Dead Land。同时边界DWORD也同时被清除。
0xfeeefeee - Freed memory set by NT's heap manager
0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ
0xabababab - Memory following a block allocated by LocalAlloc()
0xBAADF00D - HeapAlloc分配的内存

#4


急呀,高手们帮我看看

#5


p->next没有初始化,p=p->next后,p成为野指针。

修改后无运行错误:
#include <stdio.h> 
#include <stdlib.h> 
struct line{ 
int pn; 
int i; 
struct line * next; 
}; 

void decompoFactor (struct line *p,int n); 
main() 

int n; 
int k=2; 
struct line *root,*p; 
scanf("%d",&n); 
if(n <2||n>30000){ 
printf(" error input"); 
return 0; 

p=(struct line*)malloc(sizeof(struct line)); 
root=p; 
p->i=0; 
p->pn=2; 
p->next = NULL; //初始化p->next
while (k++ <=n){ 
decompoFactor(p,k); 
p=root; 

p=root; 
printf("%d ^ %d ",p->pn,p->i); 
p=p->next; 
while (p!=NULL){ 
printf("* %d ^ %d ",p->pn,p->i); 
p=p->next; 




void decompoFactor (struct line *p,int n){// 分解因数; 
while (p!=NULL){ 
if((n%(p->pn))==0){ 
n=n/(p->pn); 
(p->i)++; 

p=p->next; 

if(p==NULL){ 
p=(struct line*)malloc(sizeof(struct line)); 
p->i=1; 
p->pn=n; 

}

#6


#include <stdio.h> 
#include <stdlib.h> 
struct line{ 
int pn; 
int i; 
struct line * next; 
}; 

void decompoFactor (struct line *p,struct line *q,int n); 
int main() 

int n; 
int k=2; 
struct line *root,*p,*q; 
scanf("%d",&n); 
if(n <2||n>5000){ 
printf(" error input"); 
return 0; 

p=(struct line*)malloc(sizeof(struct line)); 
root=p;
q=p;
p->i=0; 
p->pn=2; 
p->next = NULL;        //初始化p->next
while (k<=n){ 
decompoFactor(p,q,k);
k++;
p=root; 

p=root; 
if(p->i>0)
printf("%d^%d",p->pn,p->i);
else
printf("%d",p->pn);
p=p->next; 
while (p!=NULL){ 
printf("*%d^%d",p->pn,p->i); 
p=p->next; 

return 0;



void decompoFactor (struct line *p,struct line *q,int n){// 分解因数; 
while (p!=NULL)

if((n%(p->pn))==0)

n=n/(p->pn); 
(p->i)++; 

if(n%(p->pn)!=0)
{
q=p;
    p=p->next;
}




if(p==NULL&&n!=1){

p=(struct line*)malloc(sizeof(struct line));
q->next=p;
p->i=1; 
p->pn=n; 
p->next=NULL;
p=q;

}

这个就行了,绝对正确。。。

#1


上述题目是:
N!的分解

【问题描述】
将N!分解成素数幂的乘积。
【输入形式】
    从标准输入读取一个整数N(1≤N≤30000)。
【输出形式】
结果打印到标准输出。

输出格式为:p1^k1*p2^k2…其中p1,p2…为质数且ki>1。当ki=1时只输出pi,ki=0的项不输出。分解式中的素数按从小到大输出。
【输入样例】
5
【输出样例】
2^3*3*5

#2


mark

#3


win32下的内存分配
0xcdcdcdcd - Created but not initialised
0xfdfdfdfd - 分配的CD区域前后各有一个,标示边界
0xdddddddd - Deleted,CRT中称处于这种状态的内存区为 Dead Land。同时边界DWORD也同时被清除。
0xfeeefeee - Freed memory set by NT's heap manager
0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ
0xabababab - Memory following a block allocated by LocalAlloc()
0xBAADF00D - HeapAlloc分配的内存

#4


急呀,高手们帮我看看

#5


p->next没有初始化,p=p->next后,p成为野指针。

修改后无运行错误:
#include <stdio.h> 
#include <stdlib.h> 
struct line{ 
int pn; 
int i; 
struct line * next; 
}; 

void decompoFactor (struct line *p,int n); 
main() 

int n; 
int k=2; 
struct line *root,*p; 
scanf("%d",&n); 
if(n <2||n>30000){ 
printf(" error input"); 
return 0; 

p=(struct line*)malloc(sizeof(struct line)); 
root=p; 
p->i=0; 
p->pn=2; 
p->next = NULL; //初始化p->next
while (k++ <=n){ 
decompoFactor(p,k); 
p=root; 

p=root; 
printf("%d ^ %d ",p->pn,p->i); 
p=p->next; 
while (p!=NULL){ 
printf("* %d ^ %d ",p->pn,p->i); 
p=p->next; 




void decompoFactor (struct line *p,int n){// 分解因数; 
while (p!=NULL){ 
if((n%(p->pn))==0){ 
n=n/(p->pn); 
(p->i)++; 

p=p->next; 

if(p==NULL){ 
p=(struct line*)malloc(sizeof(struct line)); 
p->i=1; 
p->pn=n; 

}

#6


#include <stdio.h> 
#include <stdlib.h> 
struct line{ 
int pn; 
int i; 
struct line * next; 
}; 

void decompoFactor (struct line *p,struct line *q,int n); 
int main() 

int n; 
int k=2; 
struct line *root,*p,*q; 
scanf("%d",&n); 
if(n <2||n>5000){ 
printf(" error input"); 
return 0; 

p=(struct line*)malloc(sizeof(struct line)); 
root=p;
q=p;
p->i=0; 
p->pn=2; 
p->next = NULL;        //初始化p->next
while (k<=n){ 
decompoFactor(p,q,k);
k++;
p=root; 

p=root; 
if(p->i>0)
printf("%d^%d",p->pn,p->i);
else
printf("%d",p->pn);
p=p->next; 
while (p!=NULL){ 
printf("*%d^%d",p->pn,p->i); 
p=p->next; 

return 0;



void decompoFactor (struct line *p,struct line *q,int n){// 分解因数; 
while (p!=NULL)

if((n%(p->pn))==0)

n=n/(p->pn); 
(p->i)++; 

if(n%(p->pn)!=0)
{
q=p;
    p=p->next;
}




if(p==NULL&&n!=1){

p=(struct line*)malloc(sizeof(struct line));
q->next=p;
p->i=1; 
p->pn=n; 
p->next=NULL;
p=q;

}

这个就行了,绝对正确。。。