我在C中编写了一些代码,将char数组的最大大小设为100.它运行良好.但是当我将char数组的最大大小增加到10000时,它会给我分段错误(因为它超出了它的限制).有人能告诉我如何增加最大大小并存储长度为10000的字符串.
即如何将"char a [100]"作为"char a [10000]"并执行相同的代码????
我有以下程序:
#include <stdio.h>
#include <sys/resource.h>
int main()
{
// Anything over ~8MB fails
short int big[4000000];
printf("%lu\n", sizeof(big));
}
Run Code Online (Sandbox Code Playgroud)
ulimit表明我的程序有无限的可用内存。但是,如果我尝试分配更多的内存,则会出现错误:
short int big[6000000];
$ gcc main.c -o main.out && ./main.out
Segmentation fault: 11
Run Code Online (Sandbox Code Playgroud)
我需要在C程序中进行任何更改,以便分配例如1GB的阵列吗?
我正在写一个C程序.在第一行,我有
typedef float m_elem[NMAX][NMAX][3];
m_elem asa_m;
m_elem asa_mi[100];
Run Code Online (Sandbox Code Playgroud)
然后,一些计算.此时,每次运行并根据输入,我将代码更改为NMAX值,然后重新编译并运行它.对于低于500的NMAX值,程序运行正常,但是对于更高的NMAX值(我需要一些输入文件),我得到的只是分段错误.
你建议我在这做什么?我读到了关于学习valgrind的内容,但在这种情况下我想知道是否只是为了让程序处理更大的矩阵而改变编译选项会有所帮助
谢谢
为什么int array[1000][1000]在C程序中的内存问题是在main方法而不是全局声明中声明的?
在这个问题中,有人在评论中建议我不应该投出结果malloc,即:
int *sieve = malloc(sizeof(int)*length);
Run Code Online (Sandbox Code Playgroud)
而不是:
int *sieve = (int *)malloc(sizeof(int)*length);
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?
编辑
标记为重复原因我没有足够的研究.
这样的事情会引发错误:
using namespace std;
int main()
{
int test[1000000] = {};
}
Run Code Online (Sandbox Code Playgroud)
这样的事情不会:
using namespace std;
int test[1000000] = {};
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
这是为什么?一百万美元甚至对内存要求不高.
我练习用 C 语言处理文件。我需要读取一个记录了大约 9000000 个数据的文件。当我读取前 9000 条数据时它起作用了。但是,当我设置 NUM_DATA = 9000000 时,它总是崩溃。我该如何解决这个问题?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define MAX_LENGTH 10
#define NUM_DATA 9000000
int main(int argc, char **argv){
char **signal = malloc( NUM_DATA * MAX_LENGTH * sizeof(char *) );
char **svid = malloc( NUM_DATA * MAX_LENGTH * sizeof(char *) );
char GetString[110];
int num;
double tw[NUM_DATA], ip[NUM_DATA], qp[NUM_DATA]
char a[20], b[20], c[20], d[20], e[20], f[20], g[20], h[20], z[20], x[20], w[20];
FILE *fIn;
fIn = fopen(argv[1], "r");
// read …Run Code Online (Sandbox Code Playgroud) 这是我的代码,我尝试过,
我必须从用户那里取一个字符串作为输出我必须在偶数位置和由空格分隔的奇数位置打印字符
我的问题:在每个测试用例中,我都会将两个字符串分配给一个空字符,以断定我的字符串已经结束.让我们假设我输入2个测试用例,现在如果输入的字符串比第一个测试用例的字符串小,则打印我的第二个测试用例的字符,但也打印测试用例的字符,因为第一个字符串大于第二个
我想问一下,如果我在每个测试用例中结束了带有空字符的字符串,怎么可能呢?
那么为什么它会在null字符后打印值,因为那是前一个测试用例的字符,因为该字符串较大且其字符仍然在数组中,但它应该打印到null字符请帮助我实现这一点.
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int t,i,j,k;
scanf("%d ",&t);
while(t>0){
char s[10000],s1[10000],s2[100000];
scanf("%s",s);
for( i=0,j=0,k=0;i<strlen(s);i++){
if(i%2==0)
s1[j++]=s[i];
else
s2[k++]=s[i];
}
s1[strlen(s1)]='\0';
s2[strlen(s2)]='\0';
printf("%s %s\n",s1,s2);
t--;
}
}
Run Code Online (Sandbox Code Playgroud)