我使用此代码:
memcpy(arr[i], arr1[i], sizeof(arr1[i]));
定义:
double** arr; // arr1 is difined the same way.
arr = new double*[row];
for (int i = 0; i < row; ++i) {
arr[i] = new double[col];
memcpy(arr[i], arr1[i], sizeof(arr1[i]));
}
我使用命令g++ -Wall -Wextra -Wpedantic -c arr.cpp
构建它并得到结果:
警告:'void * memcpy(void *,const void *,size_t)'调用中'sizeof'的参数与目标的指针类型'double *'相同;预期的'double'或显式长度[-Wsizeof-pointer-memaccess]
memcpy(arr[i], arr1[i], sizeof(arr1[i]));
^
我不明白它是什么。你能告诉我如何让它正常工作吗?
答案 0 :(得分:8)
`value of x=10;
value of k=-3;
value of a=-11;`
产生sizeof(arr1[i])
指针变量的大小,而不是您已分配的数组的实际大小。
警告是完美的,欣赏它。
答案 1 :(得分:6)
小型可视化可以帮助您更好地理解警告。
假设row = 2且col = 2.上图显示了arr1[0]
的可视化。
在您的代码memcpy(arr[i], arr1[i], sizeof(arr1[i]));
中,sizeof(arr1[i])
会产生double *的大小(由@πάνταῥεῖ表示)。如上图所示,arr1[0]
是指向double的指针,因此sizeof(arr1[0])
可以取值为4或8,具体取决于您运行的是32位还是64位应用程序。
如果col = 2,则arr1[0]
可以包含两个双精度值,即arr1[0][0]
和arr1[0][1]
,如图所示。由于您要复制整行,您必须指定由arr1[0]
保留的字节长度,可由sizeof(double)*col
按@ToddChristensen或sizeof(arr1[i][0])*col
指示。
由于您收到的警告要求指定明确的长度,因此您必须使用memcpy
以下版本才能使复制操作正常工作。
memcpy(arr[i], arr1[i], sizeof(arr1[i][0])*col);
希望这有帮助!
答案 2 :(得分:2)
请尝试使用<Limit GET HEAD POST>
order deny,allow
deny from 81.52.168.0/23
deny from 188.138.10.163/32
deny from 188.138.78.129/32
allow from all
</Limit>
。 sizeof(double) * col
并不知道您传递给sizeof()
的论据。