我使用以下代码进行简单操作 (扭转一个字符串)。但程序没有执行。它会出现运行时错误(SIGSEGV)。我使用了GCC编译器。请帮我调试程序。
#include <stdio.h>
#include <stdlib.h>
int *create(int n) {
int *a;
a = (int *)malloc(n * sizeof(int));
return a;
}
void get(int *a, int n) {
int i;
for (i = 0; i < n; i++) {
scanf("%d", *(a + i));
}
}
void reverse(int *a, int n) {
int i;
for (i = n - 1; i >= 0; i--) {
printf("\n %d", *(a + i));
}
}
int main() {
int n, *a;
scanf("%d", &n);
a = create(n);
get(a, n);
reverse(a, n);
return 0;
}
答案 0 :(得分:1)
scanf("%d",*(a+i));
调用未定义的行为,因为您通过int
预期int*
。
您必须传递指针以告知scanf()
存储数据读取的位置,因此请停止取消引用并尝试使用scanf("%d",(a+i));
。
更多说明是:
malloc()
in C。