use*_*049 4 c memcpy multidimensional-array
我有一个函数,使用memcpy在C中交换2d数组.我知道你可以交换指针,但我想在复制数组和交换指针之间进行比较.
这是我的代码,2d数组是nx n.
void swap_arrays(int n, float old[][n], float new_arr[][n]) {
float temp[n][n];
int arr_size = sizeof(float) * n * n;
memcpy(temp, old, arr_size);
memcpy(old, new_arr, arr_size);
memcpy(new_arr, temp, arr_size);
}
Run Code Online (Sandbox Code Playgroud)
它适用于5 x 5阵列,但是当阵列较大时(我需要的实际大小为4000+,它会在2000+处开始分段故障),在第一个memcpy时会出现段错误.任何帮助表示赞赏.
它有4000个段落,但这不是memcpy()错.这是因为大小超过了程序的堆栈大小.
尝试动态分配数组,它应该工作正常,像这样
float *temp;
temp = malloc(sizeof(float) * n * n);
if (temp != NULL)
{
/* memcpys here */
}
Run Code Online (Sandbox Code Playgroud)
请注意,与数组不同,这不能使用两个索引表示法来访问,以实现您需要的东西
float **temp;
temp = malloc(sizeof(float *) * n);
for (size_t i = 0 ; i < n ; ++i)
temp[i] = malloc(sizeof(float) * n); /* please check for `NULL' */
Run Code Online (Sandbox Code Playgroud)
free()在这两种情况下都需要,而在第二种情况下,您的memcpy()工作将无法正常工作.因为每个元素temp都是指针而不是a float,所以首先需要访问指针然后复制数据memcpy().
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |