gpt4 book ai didi

c - 尝试复制到结构元素时出现 MEMCPY 段错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:39:17 24 4
gpt4 key购买 nike

代码是:(我用注释标记了错误行)

#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)); //THIS IS THE FAULTY LINE

当访问不可用内存或源内存块和目标内存块重叠时,Memcpy 应该会崩溃,所以就我而言,这些问题似乎都不是有效的。为什么会开裂?

最佳答案

您为结构分配了内存,但没有为成员本身分配内存。

尝试:

snode = (SNODE *) malloc(sizeof(SNODE));
snode->nr = malloc(sizeof(int));

但如果我是你,我会改变结构:

struct stack_node_type{
int nr;
char *string;
};

memcpy(&snode->nr, nr, sizeof(nr));

关于c - 尝试复制到结构元素时出现 MEMCPY 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com