代码是:(我用评论标记了错误的行)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct stack_node_type{
int *nr;
char *string;
struct stack_node_type *next;
} SNODE;
SNODE * pushStack(SNODE **stack, int *nr, char *string){
SNODE *snode=NULL;
if(nr!=NULL){
snode = (SNODE *) malloc(sizeof(SNODE));
aux=snode->nr;
printf("%d\n", *nr);
memcpy(snode->nr, nr, sizeof(int)); //THIS IS THE FAULTY LINE
if(*(&stack)!=NULL){
snode->next=&(**stack);
}
else{
snode->next=NULL;
}
if(string!=NULL){
snode->string=&(*string);
}
}
else{
if(string!=NULL){
snode = (SNODE *) malloc(sizeof(SNODE));
if(*(&stack)!=NULL){
snode->next=&(**stack);
}
else{
snode->next=NULL;
}
snode->string=&(*string);
}
}
if(snode!=NULL){
return &(*snode);
}
else{
return &(**stack);
}
}
SNODE * popStack(SNODE **stack, SNODE *pop){
SNODE *snode=NULL;
snode=&(**stack);
if(snode!=NULL){
if(snode->nr!=NULL){
pop->nr=(int *) malloc(sizeof(int));
* (pop->nr) = * (snode->nr);
}
if(snode->string!=NULL){
int strdim = strlen(snode->string);
pop->string=(char *) malloc(strdim*sizeof(char));
strcpy(pop->string, snode->string);
}
SNODE *to_del=snode;
snode=snode->next;
free(to_del);
}
return &(*snode);
}
int main()
{
SNODE *stack=NULL;
SNODE pop;
int nr;
nr=123;
stack=pushStack(&stack, &nr, "banane");
nr=819;
stack=pushStack(&stack, &nr, "portocale");
while(stack!=NULL){
stack=popStack(&stack, &pop);
printf("POP: %d, \"%s\"\n", *(pop.nr), pop.string);
}
return 0;
}
重述错误行:
memcpy(snode-&gt; nr,nr,sizeof(int)); //这是错误的行
当正在接收不可用内存或源和目标内存块重叠时,Memcpy应该破解,因此就我而言,这些问题似乎都没有效果。 它为什么破解?
答案 0 :(得分:4)
您为结构分配了内存,但没有为成员本身分配。
尝试:
snode = (SNODE *) malloc(sizeof(SNODE));
snode->nr = malloc(sizeof(int));
但如果我是你,我会改变结构:
struct stack_node_type{
int nr;
char *string;
};
memcpy(&snode->nr, nr, sizeof(nr));