gpt4 book ai didi

c - 在结构指针中访问动态内存

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:50 25 4
gpt4 key购买 nike

我正在编写一些代码来与我创建的动态内存交互,我想知道为什么它不起作用。

struct order{
char *bookTitle;
double price;
char *category;
double remain;
int custID;
char processed;
};
typedef struct order order;

struct orderNode{
order *order;
struct orderNode *next;
};
typedef struct orderNode orderNode;

这是创建数组或 orderNodes 并尝试访问它们的代码。打印语句给我一个段错误。不知道为什么。

orderNode **processQueue = malloc(sizeof(orderNode)*numcats) ;
//sort the orders into their respective categories
//sortOrders(processQueue, unSortedQueue, numcats);
processQueue[1]->order->category = "herro" ;
puts("string set. \n");
printf("%s\n",processQueue[1]->order->category);
/*
gdb backtrace output.
#0 strlen () at ../sysdeps/x86_64/strlen.S:106
#1 0x00007ffff786794c in _IO_puts (str=0x1000000000a2074 <error: Cannot access memory at address 0x1000000000a2074>)
at ioputs.c:36
#2 0x000000000040192f in main (argc=4, argv=0x7fffffffdbd8) at main.c:444
*/

提前致谢!

最佳答案

我认为不是

orderNode **processQueue = malloc(sizeof(orderNode)*numcats) ;

你是说

orderNode *processQueue = malloc(sizeof(orderNode)*numcats) ;

还要考虑到,对于数组中的每个 orderNode,您必须在尝试访问其自己的数据成员之前分配数据成员 order

C 中的索引从零开始。好像在这个声明中

processQueue[1]->order->category = "herro" ;

您想访问 processQueue[0] 而不是 processQueue[1]

代码看起来像

orderNode *processQueue = malloc( sizeof( orderNode ) * numcats );

processQueue[0].order = malloc( sizeof( order ) );
processQueue[0].order->category = "herro";

puts( "string set." );
puts( processQueue[0].order->category );

关于c - 在结构指针中访问动态内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27135807/

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