gpt4 book ai didi

c - main 上的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:32 24 4
gpt4 key购买 nike

我有一个小的 C 程序。当我用 gcc 编译它时,一切正常,但当我尝试运行它时,我收到此消息:

Segmentation fault (core dumped)

我尝试用 gdb and 调试它当我在 main() 上放置断点时并启动程序,我在 gdb 中收到此消息:

Single stepping until exit from function main, which has no line number information.

Program received signal SIGSEGV, Segmentation fault.

0x00007ffff7a56ad4 in ?? () from /lib/x86_64-linux-gnu/libc.so.6

这是我的 mani() 函数的最开始:

int main(int argc, char **argv) {

long N;
double *A, *B, *C, t;

srand(time(NULL));

N = atoi(argv[1]);
A = (double *) malloc(N * N * sizeof(double));
B = (double *) malloc(N * N * sizeof(double));
C = (double *) malloc(N * N * sizeof(double));
matFillSimple(N, A, 1.0);
matFillSimple(N, B, 2.0);
matFillSimple(N, C, 0.0);
...

最佳答案

您应该检查N 的类型是否与atoi() 的返回值匹配。避免依赖隐式类型转换,因为这会导致值变成您不期望的东西的问题。

如果您编译时出现所有警告 (gcc -Wall),那么您应该会看到针对此效果的警告。您可以使用 GCC 打开其他警告,listed in the documentation .带警告编译是一个好习惯。

此外,在处理指针时养成错误检查的(好)习惯。请务必在每次调用后检查是否成功分配内存。

换句话说:

A = (double *) malloc(N * N * sizeof(double));
...

应该是这样的:

double *A = NULL;
A = malloc(N * N * sizeof(double));
if (!A) {
fprintf(stderr, "ERROR: Could not allocate space for A\n");
return EXIT_FAILURE;
}
...

对每个 double 指针重复此操作。

我怀疑你的 N 值太大(N * N 甚至更大)以至于你的系统在运行 之前就耗尽了内存matFillSimple()。这应该有助于排除这种可能性。

关于c - main 上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19737435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com