구조물의 변수 나 멤버와 일치 할 수있는 메타 바이블을 선언하는 데 사용하기에 올바른 유형은 무엇입니까?
-
20-09-2019 - |
문제
구조물의 변수 나 멤버와 일치 할 수있는 메타 바이블을 선언하는 데 사용하기에 올바른 유형은 무엇입니까?
예를 들어 다음 예제 소스 코드를 사용하십시오.
#include <stdio.h>
#include <stdlib.h>
struct some_struct {
int i;
char *s;
};
void test(void)
{
struct some_struct *ptr;
char *s;
s = malloc(100);
ptr = malloc(sizeof(struct some_struct));
ptr->s = malloc(100);
puts("done");
}
다음과 함께 시맨틱 패치:
@@
identifier ptr;
//idexpression ptr;
//expression ptr;
expression E;
@@
ptr = malloc(E);
+if (ptr == NULL)
+ return;
그만큼 ptr->s
할당은 없으면 일치하지 않습니다 expression ptr
사용. 사용 expression
이것은 나에게 너무 광범위한 것 같습니다. 이것이 정확하고 유일한 방법입니까?
해결책
일반적으로 LValue 포인터를 잡으려고합니다. 그러나 표현식에 값이 할당되는 장소 만 일치하기 때문에 malloc
, 평범한 표현식은 작업을 잘 수행합니다 (비 포인터 또는 비 값이 컴파일러가 불만을 제기해야하므로).
당신이 가질 문제는 표현식에 부작용이있는 경우 (예 :
struct some_struct *a[10];
int i = 0;
a[i++] = malloc(sizeof(struct some_struct));
제휴하지 않습니다 StackOverflow