C代码停止运行
我有以下给出错误的C代码:C代码停止运行,c,compiler-errors,C,Compiler Errors,我有以下给出错误的C代码: Program stopped at 0x4019b3. It stopped with signal SIGSEGV, Segmentation fault. 调试时 代码如下: #include <stdio.h> #include <complex.h> #include <stdlib.h> #include <time.h> int main() { clock_t begin, end; d
Program stopped at 0x4019b3.
It stopped with signal SIGSEGV, Segmentation fault.
调试时
代码如下:
#include <stdio.h>
#include <complex.h>
#include <stdlib.h>
#include <time.h>
int main()
{
clock_t begin, end;
double time_spent;
begin = clock();
int n = 100;int i; int j;
int N = 64;int r;
double complex (s)[4] = {-1-1*I, -1+1*I, 1-1*I, 1+1*I};
double complex symbol[n][N];
for (i=0; i<n; i++){
for (j=0; j<N; j++){
r = rand() % 4;
symbol[i][j]=s[r];
}
// Now add pilots:
symbol[i][11] = 1;
symbol[i][22] = 1;
symbol[i][33] = 1;
symbol[i][44] = 1;
}
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
return 0;
}
#包括
#包括
#包括
#包括
int main()
{
时钟开始,结束;
花费的时间加倍;
开始=时钟();
int n=100;int i;int j;
int N=64;int r;
双络合物[4]={-1-1*I,-1+1*I,1-1*I,1+1*I};
双复数符号[n][n];
对于(i=0;i您在第二个循环测试中有一个复制粘贴错误:
for (j=0; j<N; j++){
^
for(j=0;j保存行声明的变量所需的内存
double complex symbol[100000][64];
太多了
即使是下面这样的简单程序,在运行64位机器时也会遇到分段错误
#include <stdio.h>
#include <complex.h>
void foo()
{
double complex symbol[100000][64];
printf("%zu\n", sizeof(symbol));
}
int main(int argc, char** argv)
{
foo();
return 0;
}
另一个问题是在循环中:
for (i=0; i<n; i++){
for (j=0; i<N; j++){ // Problem line
r = rand() % 4;
symbol[i][j]=s[r];
}
for(i=0;i)你做了什么——如果有的话——来尝试解决这个问题?你需要在这行错误的地方分配内存:double complex(*symbol)[n][n]=malloc(n*sizeof*symbol);
。更仔细地从R Sahu的答案中复制出来。此外,你到处都出现了伪*
。它应该是symbol[i][j]
,而非*符号[i][j]
所有的试点都是一样的。如果你不懂某件事,那么就去看看它是如何工作的,不要只是猜测某件事,然后点击编译,然后在出现问题时感到困惑segfault@MattMcNabb是的,更正了。关于随机性问题,这将取决于PRNG处于哪个位置use@MitchWheat同样的错误,顺便说一句,当我运行windo时w withProgName.exe已停止响应
显示在黑色的.exe
输出窗口上方。@Matt:stdlib.h,rand()@MitchWheatrand()
是一个标准的C函数,该标准没有规定低阶位的随机性必须低于高阶位。OP的实现可能有一个低阶位的随机性不低于高阶位的实现。我假设你指的是LCG.Glibc,所以我质疑你的统计数据。链接到di可能更好讨论此主题而不是断言。如果有一个问题,通常会有多个…@R Sahu它不是内存。我尝试symbol[10][64]
并得到相同的错误。但调试器指向行symbol[I][j]=s[R]
@AboAmmar您正在访问MitchWheat的答案所建议的符号
数组的边界之外。您需要解决这两个问题才能使代码正常工作。@MattMcNabb我已经将I
更正为j
。第*symbol[I][j]=s[r]行出现相同错误
@AboAmmar您最新的编辑完全搞乱了一切
double complex (*symbol)[N] = malloc(n * sizeof *symbol);
for (i=0; i<n; i++){
for (j=0; i<N; j++){ // Problem line
r = rand() % 4;
symbol[i][j]=s[r];
}
for (j=0; j<N; j++){
^^ Use j not i