我现在正在学习C语言,但我不知道为什么会发生错误。有人可以帮忙吗?
#include <stdio.h>
#include <stdlib.h>
int main() {
struct TestData {
int * a;
};
struct TestData * p1 = (struct TestData *)malloc(sizeof(struct TestData));
void Data(struct TestData * addstruct) {
int b;
addstruct->a = &b;
}//Here are two errors, error code:C2601, E0065
Data(p1);
printf("%p", p1);
free(p1);
return 0;
}
答案 0 :(得分:3)
在标准C中没有本地功能。您需要将Data
函数移出main
。
您可能想要这样:
#include <stdio.h>
#include <stdlib.h>
struct TestData {
int * a;
};
void Data(struct TestData * addstruct) {
int b;
addstruct->a = &b;
}
int main() {
struct TestData * p1 = (struct TestData *)malloc(sizeof(struct TestData));
Data(p1);
printf("%p", (void*)p1); // %p needs casting to (void*)
free(p1);
return 0;
}
此代码可以正确编译,但是还有另一个问题:
void Data(struct TestData * addstruct) {
int b;
addstruct->a = &b;
}
您将指向 local 变量b
的指针放入addstruct->a
中,但是一旦Data
完成,b
就不再存在,addstruct->a
因此指向垃圾。
还请阅读以下SO文章:
答案 1 :(得分:0)
在标准C yon中,无法在其他函数内部创建函数。您需要将Data函数移出main函数。
看起来像这样,还添加了一些C样式:
#include <stdio.h>
#include <stdlib.h>
struct _TestData {
int * a;
};
typedef struct _TestData TestData;
void Data(TestData* addstruct);
int main() {
TestData* p1 = (TestData*)malloc(sizeof(TestData));
int test_b = 100;
Data(p1,test_b);
printf("%p", (void*)p1); // %p needs casting to (void*)
free(p1);
return 0;
}
/* You try put local pointer , after this function it will point to junk*/
/* I have changed Data function , add one arg now, it will work */
void Data(TestData* addstruct,int* test_b) {
addstruct->a = test_b;
return;
}