【发布时间】:2021-11-13 04:49:28
【问题描述】:
我不确定这个错误是什么意思“运行:第 1:3 行分段错误(核心转储)./a.out”,因为这是我第一次遇到它。似乎这里发生了错误
dgemm(40, &A, &B, &C);
这是我的代码
void dgemm (int n, double *A, double *B, double *C) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
double cij = C[i + j * n];
for (int k = 0; k < n; k++) {
cij += A[i + k * n] * B[k + j * n];
}
C[i + j * n] = cij;
}
}
}
int main() {
double A = 4.1;
double B = 5.2;
double C = 7.4;
dgemm(40, &A, &B, &C);
return 0;
}
谁能告诉我是什么导致了这个错误以及如何修复它?
【问题讨论】:
-
this 解谜了吗?
-
1) “分段错误”是运行时错误,而不是“编译错误”(根据您的原始标签)。 2) 更重要的是......如果 dgemm() 将输入参数 A、B 和 C 视为“40 元素数组”......那么你会更好地为 40 个元素分配空间!传递“addressof”单个双精度而不是为 n 元素数组分配空间几乎肯定会导致分段错误!
-
它实际上将它们视为 1600 个元素的数组。
标签: c segmentation-fault