在C中返回数组:随机错误,垃圾值

时间:2017-05-29 08:24:03

标签: c arrays

我试图让这个工作起作用,但我一直都会遇到非常奇怪的错误,有时它会毫无错误地执行,有时会出现memory access violation错误,其中7个返回值始终为garbage并且由于某种原因该程序无法使用printfC我对#include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h> int gen_bp() { int min = 0; int max = 3; int r; r = (rand() % (max + 1 - min)) + min; return r; } int * gen_gene(int len) { int a; int * gene = malloc(len); int bp; srand( (unsigned)time( NULL ) ); for( a = 0; a < len; a = a + 1 ){ bp = gen_bp(); printf("value of a: %i\n", bp); //if i remove this line, it crashes?! gene[a] = bp; } return gene; } int main() { char codons[4] = {'G','T','A','C'}; int genelen = 20; int counter; int * gene; gene = gen_gene(genelen); for( counter = 0; counter < genelen; counter++ ){ printf("%i value of a: %i\n", counter, gene[counter]); } free(gene); return(0); } 并不擅长,所以我没有丝毫的线索。

value of a: 1
value of a: 1
value of a: 3
value of a: 0
value of a: 2
value of a: 1
value of a: 3
value of a: 3
value of a: 1
value of a: 2
value of a: 3
value of a: 0
value of a: 3
value of a: 1
value of a: 0
value of a: 2
value of a: 3
value of a: 2
value of a: 2
value of a: 0
0 value of a: 1
1 value of a: 1
2 value of a: 3
3 value of a: 0
4 value of a: 2
5 value of a: 1
6 value of a: 3
7 value of a: 3
8 value of a: 1
9 value of a: 2
10 value of a: 1635131449 // 10 to 16 are always garbage, and never change
11 value of a: 1702194273
12 value of a: 543584032
13 value of a: 891304545
14 value of a: 808661305
15 value of a: 892351281
16 value of a: 2570
17 value of a: 2
18 value of a: 2
19 value of a: 0

这是我得到的输出

<?php
$servername = "localhost";
$username = "root";
$password = "";
$database = "";
$port = "8012";

// Create connection
$conn = new mysqli($servername, $username, $password, $database, $port);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}else{
die("Connected successfully");
}

有时它以0错误结束,有时它在输出后崩溃。绝对没有丝毫线索的原因。

2 个答案:

答案 0 :(得分:6)

您为len字节保留空间,但是您想为

预留空间
int * gene = malloc(sizeof(int) * len);

int * gene = malloc(sizeof(*gene) * len);

你忘了#include <time.h>

答案 1 :(得分:0)

直接使用malloc太容易出错;在您的代码中,您忘记了与元素大小相乘。

改为使用宏:

#define NEW_ARRAY(ptr, n) (ptr) = malloc((n) * sizeof (ptr)[0])

int *gene;
NEW_ARRAY(gene, len);