这个输入有什么问题?我在这个程序中遇到分段错误(核心转储)
What is the problem with this input? I get segmentation fault(core dumped) in this program
在这个程序中我遇到了分段错误。如果我注释掉最后一个 for 循环(仅 returns 输入参数)程序运行完美,如果我注释另一个 for 循环(带有数字的绝对值)程序仍然运行完美。那么也许最后两个循环 一起 会产生一些问题?
提前致谢
#include <stdio.h>
void abs_numbers(int size, int v[], int v2[]) {
for (int i = 0; i < size; ++i) {
v2[i] = v[i];
if (v2[i] < 0) {
v2[i] = v[i] * (-1);
}
}
}
int main() {
int size;
int numbers[size];
int numbers2[size];
printf("Size of numbers: \n");
scanf("%d", & size);
for (int i = 0; i < size; ++i) {
printf("%d. number: ", i + 1);
scanf("%d", & numbers[i]);
}
abs_numbers(size, numbers, numbers2);
printf("Abs of numbers");
for (int k = 0; k < size; ++k) {
printf("%d", numbers2[k]);
if (k < size - 1) {
printf(", ");
}
}
puts("");
printf("Numbers: ");
for (int l = 0; l < size; ++l) {
printf("%d", numbers[l]);
if (l < size - 1) {
printf(", ");
}
}
puts("");
return 0;
}
数组的大小,numbers 和 numbers2,必须是编译时常量。
如果您可以像这样确定它们的最大大小,则可以设置两个数组的大小。
int numbers[16];
int numbers2[32];
但是如果你不能确定最大大小或者你不想浪费内存,你应该动态分配内存,这需要像这样动态分配,
int* numbers=malloc(sizeof(int)*16);
int* numbers=malloc(sizeof(int)*32);
不要忘记释放使用 free() 分配的内存。
在这个程序中我遇到了分段错误。如果我注释掉最后一个 for 循环(仅 returns 输入参数)程序运行完美,如果我注释另一个 for 循环(带有数字的绝对值)程序仍然运行完美。那么也许最后两个循环 一起 会产生一些问题?
提前致谢
#include <stdio.h>
void abs_numbers(int size, int v[], int v2[]) {
for (int i = 0; i < size; ++i) {
v2[i] = v[i];
if (v2[i] < 0) {
v2[i] = v[i] * (-1);
}
}
}
int main() {
int size;
int numbers[size];
int numbers2[size];
printf("Size of numbers: \n");
scanf("%d", & size);
for (int i = 0; i < size; ++i) {
printf("%d. number: ", i + 1);
scanf("%d", & numbers[i]);
}
abs_numbers(size, numbers, numbers2);
printf("Abs of numbers");
for (int k = 0; k < size; ++k) {
printf("%d", numbers2[k]);
if (k < size - 1) {
printf(", ");
}
}
puts("");
printf("Numbers: ");
for (int l = 0; l < size; ++l) {
printf("%d", numbers[l]);
if (l < size - 1) {
printf(", ");
}
}
puts("");
return 0;
}
数组的大小,numbers 和 numbers2,必须是编译时常量。 如果您可以像这样确定它们的最大大小,则可以设置两个数组的大小。
int numbers[16];
int numbers2[32];
但是如果你不能确定最大大小或者你不想浪费内存,你应该动态分配内存,这需要像这样动态分配,
int* numbers=malloc(sizeof(int)*16);
int* numbers=malloc(sizeof(int)*32);
不要忘记释放使用 free() 分配的内存。