未经许可更改内存的值

Moi*_*ojo -1 c arrays loops

我有一个2维数组,当我第一次打印数组的数据时,日期打印正确,但另一次数组[last] [i]的数据从i = 0到last - 1.

显然是一个逻辑错误,但我不明白原因,因为我复制并粘贴了for语句.那么......¿C改变数据?

我使用gcc -std=c99但在此之前我尝试使用C++和cout语句.

这是输出截图

#include <stdio.h>

int main(int argc, char *argv[])
{
  unsigned int numero_jugaderes = 11;
  unsigned int numero = numero_jugaderes - 1;

  unsigned int p_a[numero];

  float p_aya[numero][numero];

  for (unsigned int i = 0; i <= numero; i++) {
    p_a[i] = i;
  }

  for (unsigned int i = 0; i <= numero; i++) {
    for (unsigned int j = 0; j <= numero; j++) {
      p_aya[i][j] = (float) (p_a[i] * p_a[j]) / 100;
      printf("%f\t", p_aya[i][j]);
    }
    puts("");
  }

  puts("\n");

  for (unsigned int i = 0; i <= numero; i++) {
    for (unsigned int j = 0; j <= numero; j++) {
      printf("%f\t", p_aya[i][j]);
    }
    puts("");
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

我看到的问题是,你正在循环使用条件检查

 for (unsigned int i = 0; i <= numero; i++) 
Run Code Online (Sandbox Code Playgroud)

对于定义为的数组

unsigned int p_a[numero];
Run Code Online (Sandbox Code Playgroud)

你会一个接一个地走.这实际上是无效的内存访问,它调用未定义的行为.

C数组具有基于0的索引,因此有效限制将是

for (unsigned int i = 0; i < numero; i++)
Run Code Online (Sandbox Code Playgroud)