【发布时间】:2012-03-30 03:12:08
【问题描述】:
我有一个 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 属于堆上的结构,因此不应该被修改。
为什么会这样?
【问题讨论】:
-
您访问
freq_array_count没有分配它,也许它不应该是一个指针?另外,您真的应该将用户数据设置为wav指针的地址(即指向指针的指针)吗?
标签: c xml pointers xml-parsing