gpt4 book ai didi

c - XML 解析启动处理程序中的指针值已更改

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:55 27 4
gpt4 key购买 nike

我有一个 int 指针,由于某种原因,它的值在从 main 传递出去后立即被修改。该文件使用 expat XML_Parse 命令。相关代码如下:

我在其中设置值的结构:

struct song_data {

float *freq_array;
int *freq_array_count;
int *freq_duration_array;
};

部分(大部分)主要内容:

int main(int argc, char **argv) {
const int BUFFER_SIZE = 8192;
char buffer[BUFFER_SIZE];

struct song_data * wav = (struct song_data *)malloc(sizeof(struct song_data));
*wav->freq_array_count=0;

XML_Parser parser = XML_ParserCreate(NULL); //create parser
XML_SetElementHandler(parser, start, end);
XML_SetUserData(parser, &wav);

FILE *xml_file = fopen(argv[1], "r");
int done = 0;



while (!done) {
int length = fread(buffer, sizeof(char), BUFFER_SIZE, xml_file);
done = feof(xml_file);
XML_Parse(parser, buffer, length, done);
}

和启动处理程序:

void start(void *data, const char *tag, const char **attributes) {
struct song_data *song_data = (struct song_data *) data;
printf("in start, freq_array_count=%d\n,*song_data->freq_array_count);
// rest of code
}

启动处理程序中的 printf 打印了一些奇怪的值,如 -7194902 或其他东西(我正在处理的服务器当前已关闭)。

我尝试过的另一种方法(如果我能弄清楚如何让它工作,我会更喜欢)是让 int *freq_array_count 只是一个 int (int freq_array_count)... 然而,这也会在第一次调用启动处理程序时立即获得一个奇怪的值(超过 100,000,000)

为什么?我觉得在此处采用的方法中,似乎不应修改 int 值,因为它指向我明确要求的内存的一部分。

在另一种方法中,它也不应该被修改,因为 int 属于堆上的结构,因此不应该被修改。

为什么会这样?

最佳答案

你怎么知道*数据已经分配给有效数据了?仅供引用,我不知道 start 是如何调用的,能否请您发布调用,以便我可以看到 *data 指向什么?

哦,我看到了问题,将 XML_SetUserData(parser, &wav) 更改为 XML_SetUserData(parser, wav) 因为变量 wav 已经是一个指针类型,您不需要指针的地址,而是想要的地址wav指向的堆内存。

关于c - XML 解析启动处理程序中的指针值已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936519/

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