我对 C 非常陌生,来自 Python、Java 和 C# 世界。这可能是一个愚蠢的问题,但我遇到了分段错误:
// struct for storing matrices
typedef struct {
int m;
int n;
float* elts;
} Matrix;
在我的主要方法中:
Matrix A;
A.n = 3;
A.m = 3;
memcpy( A.elts, (float[]) {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f}, 9 * sizeof(float)); // seg fault because of this memcpy.
我也尝试过没有f
,同样的问题。
你能帮忙吗
在C语言中,数组和指针是相关的,但它们并不相同。声明一个指针以使其成为一个数组是不够的:您需要将该指针设置为指向足够大小的内存块的值。
为了使您的示例正常工作,请添加
A.elts = malloc(sizeof(float) * 9);
打电话之前memcpy
。否则,指针elts
仍未初始化,因此写入该指针指向的内存是未定义的行为。请注意,您需要致电free(A.elts)
当你完成数组时。
另一种选择是声明elts
作为固定大小的数组,而不是指针:
float elts[9];
但这不允许调整数组的大小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)