Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C代码停止运行_C_Compiler Errors - Fatal编程技术网

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

我有以下给出错误的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;
    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 with
ProgName.exe已停止响应
显示在黑色的
.exe
输出窗口上方。@Matt:stdlib.h,rand()@MitchWheat
rand()
是一个标准的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