1
的代碼是:(我已經打上了故障線路與評論)試圖複製到結構元素時MEMCPY分段錯誤
#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-> nr,nr,sizeof(int)); //這是故障線路
時不可用的存儲器被accesed或源和目的地存儲器塊重疊的memcpy應開裂,所以只要我而言,沒有這些問題似乎是有效的。 它爲什麼破解?
外觀極好答案 – 2011-12-27 23:41:50